动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式生成的子类更为灵活。
装饰模式是为已有功能动态添加更多功能的一种方式。
/** * @Author: subd * @Date: 2019/9/17 8:15 * 装饰模式 */ public class DecorationMode { public static abstract class Component { public abstract void Operation(); } public static class ConcreteComponent extends Component { @Override public void Operation() { System.out.println("具体对象的操作"); } } public static abstract class Decorator extends Component { protected Component component; public void setComponent(Component component) { this.component = component; } @Override public void Operation() { if (component != null) { component.Operation(); } } } public static class ConcreteDecoratorA extends Decorator { private String addedState; @Override public void Operation() { super.Operation(); addedState = "New State"; System.out.println("具体装饰对象A的操作"); } } public static class ConcreteDecoratorB extends Decorator { @Override public void Operation() { super.Operation(); AddedBehavior(); System.out.println("具体装饰对象B的操作"); } private void AddedBehavior() { } } public static void main(String[] args) { /** * 装饰的方法是: * 首先用 ConcreteComponent 实例化对象c * 然后用 ConcreteDecoratorA 实例化从ca * 再用 ConcreteDecoratorB 实例化从cb */ ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA ca = new ConcreteDecoratorA(); ConcreteDecoratorB cb = new ConcreteDecoratorB(); ca.setComponent(c); cb.setComponent(ca); cb.Operation(); } }