设计模式:装饰模式的原理及代码演示

来源:互联网 发布:php 文本封装超链接 编辑:程序博客网 时间:2024/05/21 11:27
/*MyReader //专门用于读取数据的类。|--MyTextReader|--MyBufferedTextReader //缓冲区的|--MyMediaReader|--MyBufferedMediaReader//缓冲区的|--MyDataReader|--MyBufferDataReader//缓冲区的 上面的这个类扩展性很差 找到其参数的共同类型,通过多态的形式,可以提高扩展性。//优化后的体系MyReader //专门用于读取数据的类。|--MyTextReader|--MyMediaReader|--MyDataReader|--MyBufferedReader //其功能都是基于上面的类装饰模式比类继承要灵活,避免了继承体系臃肿。而且降低了类于类之间的关系。装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能。所以装饰类和被装饰类通常都是属于一个体系中的。实际使用中:  通过装饰来增强原有代码的功能,它的灵活比如说你有一个对象是以有建立的。  现在想感觉这个功能不够用了,这时不要用继承,而是使用装饰。这时再写个类  把原的对象传进来就可以了。当写的功能有问题时,可以直接去掉,再使用原来  的功能,依然可以使用。灵活性更强。读取并显示行号:*/import java.io.*;class MyLineNumberReader{private Reader r;int num = 0;MyLineNumberReader(Reader r){this.r = r;}public String getNumberLine()throws IOException{StringBuilder sb = new StringBuilder();num++;int  ch ;while((ch = r.read()) != -1){if(ch == '\r')continue;if(ch == '\n')return sb.toString();elsesb.append((char)ch);}if(sb.length() !=0)return sb.toString();return null;}public void setNum(int num){this.num = num;}public int getNum(){return num;}public void myClose() throws IOException{fr.close();}}class  MyLineReaderDemo{public static void main(String[] args) throws IOException{FileReader fr = new FileReader("MyLineReaderDemo.java");MyLineNumberReader mr = newMyLineNumberReader(fr);String str;while((str = mr.getNumberLine()) != null)System.out.println(mr.getNum()+str);mr.myClose();}}

0 0
原创粉丝点击