设计模式——装饰模式

74 阅读1分钟

一.定义

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

二.类图

image.png

  • Component抽象构件。这是一个接口或者抽象类,就是定义我们最核心、最原始的对象。
  • ConcreteComponent具体构件。是最基本、最核心、最原始的接口或抽象类的实现,被装饰的对象。
  • Decorator装饰角色。一般是个抽象类,实现接口或者抽象方法,里面不一定有抽象的方法,但是在它的属性里必然有一个private变量指向Component抽象构件。

三.优点

  • 装饰类和被装饰类可以独立发展,而不会相互耦合。Component类无需知道Decorator类,Decorator也不用知道具体的构件。
  • 装饰模式是继承关系的一个替代方案。不管装饰多少层,返回的还是父类Component.
  • 装饰模式可以动态地扩展一个实现类的功能。

四.缺点

    多层装饰是比较复杂的。

五.使用场景

  • 需要扩展一个类的功能,或给一个类增加附加功能。
  • 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
  • 需要为一批兄弟类进行改装或加装功能。

六.注意事项

  • 装饰模式是对继承的有力补充。
  • 继承是静态地给类增加功能,而装饰模式则是动态地给增加功能。