JAVA 的IO模块如果不使用装饰模式,会需要更多的IO类,如带缓冲的并能读取基本类型的类、读取字节数组的缓冲类等等。
package com.test.decrator; //抽象构件角色 public interface Component { public void dosometing(); }
package com.test.decrator; //具体构件角色 public class ConcreteComponent implements Component { public void dosometing() { System.out.println("功能A"); } }
package com.test.decrator; //装饰角色 public class Decorator implements Component { private Component component; public Decorator(Component component){ this.component = component; } public void dosometing() { component.dosometing(); } }
package com.test.decrator; //具体装饰角色1 public class ConcreteDecorator1 extends Decorator { public ConcreteDecorator1(Component component) { super(component); } public void dosometing() { super.dosometing(); this.doAnotherthing(); } private void doAnotherthing(){ System.out.println("功能B"); } }
package com.test.decrator; //具体装饰角色2 public class ConcreteDecorator2 extends Decorator { public ConcreteDecorator2(Component component) { super(component); } public void dosometing() { super.dosometing(); this.doAnotherthing(); } private void doAnotherthing() { System.out.println("功能C"); } }
package com.test.decrator; public class Client { public static void main(String[] args) { //节点流 Component component = new ConcreteComponent(); //过滤流 Component component2 =new ConcreteDecorator1(component); //过滤流 Component component3 =new ConcreteDecorator2(component2); component3.dosometing(); } }
打印出
功能A功能B功能C
学IO最重要的是深刻理解装饰模式!