口诀:是你,还有你,一切拜托你
解释:
是你(继承被装饰的类),还有你(内部维护一个被装饰的类的对象),一切拜托你(主要方法还要使用该对象,在此基础上增强)
举个例子
//将BufferedReader装饰为 带行号的缓冲输入字符流,让它继承BufferedReader(是你)
class BufferedLineNum2 extends BufferedReader{
//在内部维护一个被装饰类的引用(还有你)
BufferedReader bufferedReader;
//记录行号
int count = 1;
//构造方法
public BufferedLineNum2(BufferedReader bufferedReader){
super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错,因为父类BufferedReader没有无参构造方法
this.bufferedReader = bufferedReader;
}
//增强readLine方法(一切摆脱你)
public String readLine() throws IOException{
String line = bufferedReader.readLine();
if(line==null){
return null;
}
line = count+" "+line;
count++;
return line;
}
}
来源:CSDN
作者:ZHUSHANGLIN
链接:https://blog.csdn.net/ZHUSHANGLIN/article/details/103533370