设计模式-装饰模式

淺唱寂寞╮ 提交于 2019-12-05 02:46:29

装饰模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。

  • 通常是继承关系的替代方案。
  • 常用于动态的增加对象的功能。

通用类图

组件含义

Component: 抽象的,需要被修饰的核心类。
ConcreteComponent: 被修饰的类的具体实现。
Decorator: 抽象的,包含指向Component构件的私有变量。
ConcreteComponent: 装饰类的具体实现。

demo

abstract class Component {
    public abstract void operate();
}

class ConcreateComponent extends Component {
    @Override
    public void operate() {
        System.out.println("do something");
    }
}

abstract class Decorator extends Component {
    private Component component = null;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operate() {
        this.component.operate();
    }
}

class ConcreteDecorator1 extends Decorator {
    public ConcreteDecorator1(Component component) {
        super(component);
    }

    private void method1() {
        System.out.println("method 1 decorate");
    }

    public void operate() {
        this.method1();
        super.operate();
    }
}

class ConcreteDecorator2 extends Decorator {
    public ConcreteDecorator2(Component component) {
        super(component);
    }

    private void method2() {
        System.out.println("method 2 decorate");
    }

    public void operate() {
        this.method2();
        super.operate();
    }
}

public class Client {
    public static void main(String[] args) {
        Component component = new ConcreateComponent();
        component = new ConcreteDecorator1(component);
        component = new ConcreteDecorator2(component);
        component.operate();
    }
}

结果

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!