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最重要的是深刻理解装饰模式!