java设计模式-装饰模式(Decorator)初探
0、每次看到下面的代码都困惑,其实这里面应用了设计模式之一的装饰模式,java.io中大量应用了装饰模式,今天我们就来一探究竟。
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));
//抽象构件接口,规范准备接收附加责任的对象public interface Component{public void doSomething();}
//具体构件角色public class ConcreteComponent implements Component{@Overridepublic void doSomething(){System.out.println("功能A");}}
//装饰角色:持有一个构件(Component)对象的引用public class Decorator implements Component{private Component component;public Decorator(Component component){this.component = component;}@Overridepublic void doSomething(){component.doSomething();}}
//具体装饰角色1,负责给构件对象"贴上"附加的责任,即添加新的功能public class ConcreteDecorator1 extends Decorator{public ConcreteDecorator1(Component component){super(component);}@Overridepublic void doSomething(){super.doSomething();this.doAnotherThing();}private void doAnotherThing(){System.out.println("功能B");}}
//具体装饰角色2public class ConcreteDecorator2 extends Decorator{public ConcreteDecorator2(Component component){super(component);}@Overridepublic void doSomething(){super.doSomething();this.doAnotherThing();}private void doAnotherThing(){System.out.println("功能B");}}
public class TestDecorator{public static void main(String[] args){ Component component = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent())); component.doSomething();}}