装饰器模式:
使用分层对象来动态透明的向单个对象中添加责任(功能)。
装饰器指定包装在最初的对象周围的所有对象都具有相同的基本接口。
某些对象是可装饰的,可以通过将其他类包装在这个可装饰对象的四周,来将功能分层。
装饰器必须具有和他所装饰的对象相同的接口。
JavaIO中的应用:
Java I/O类库需要多种不同的功能组合,所以使用了装饰器模式。
FilterXxx类是JavaIO提供的装饰器基类,即我们要想实现一个新的装饰器,就要继承这些类。
package file;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
//装饰者模式
class Mylinebufferreader extends BufferedReader{
private BufferedReader bufferedreader;
int count = 0;
public Mylinebufferreader(BufferedReader bufferedreader ) {
super(bufferedreader);
this.bufferedreader = bufferedreader;
// TODO Auto-generated constructor stub
}
public String readLine() throws IOException{
String line = bufferedreader.readLine();
if(line!= null){
count++;
return count+" "+line;
}else{
return null;
}
}
}
class MyQutoBufferedReader extends BufferedReader{
private BufferedReader bufferedreader;
public MyQutoBufferedReader(BufferedReader bufferedreader) {
super(bufferedreader);
this.bufferedreader = bufferedreader;
// TODO Auto-generated constructor stub
}
public String readLine() throws IOException{
String line = bufferedreader.readLine();
if (line != null) {
return line+";";
} else {
return null;
}
}
}
public class Demo08 {
public static void main(String[] args) throws IOException {
myread();
}
public static void myread() throws IOException{
Reader reader = new FileReader("D://demo.java");
BufferedReader bufferedreader = new BufferedReader(reader);
BufferedReader br = new Mylinebufferreader(bufferedreader);
br= new MyQutoBufferedReader(br);
String line = null;
while((line = br.readLine())!=null){
System.out.println(line);
}
}
}