装饰器模式增加了被装饰对象相应方法功能。
//公共接口
interface SellInterface{
public void sell();
}
//被装饰类
class RadWineFactory implements SellInterface{
public void sell(){
System.out.println("RadWineFactory.sell()");
}
}
//装饰类
class DecorateFactory implements SellInterface{
SellInterface realObj;
public DecorateFactory(SellInterface realObj){
this.realObj=realObj;
}
public void sell(){
realObj.sell();
}
}
//具体装饰类
class SimpleDecorator extends DecorateFactory{
SellInterface realObj;
public SimpleDecorator(SellInterface realObj){
super(realObj);
}
public void sell(){
System.out.println("SimpleDecorator: do some other things");
super.sell();
System.out.println("SimpleDecorator: do some other things again");
}
}
//测试代码
public class DecorateTest{
public static void main(String[] args){
SellInterface obj=new SimpleDecorator(new RadWineFactory());
obj.sell();
}
}
---------------------------------------------------------------------------------------------------------------------------------
java.io包中的BufferedReader类就实现了对Reader类的包装,以下文字摘自java doc:
通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。