设计模式--装饰模式
-
概念
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。 -
结构图
-
角色说明
- Component
接口/抽象类–原始的对象,可以给这些对象动态的添加职责- ConcreteComponent
具体的类,也就是我们要修饰的
- Decorator
装饰角色- ConcreteDecorator
具体装饰角色,为COMPONENT添加职责功 -
优点
- 装饰类和被被装饰类独立发展,不耦合
…将类中的装饰功能从类中搬移除去,简化原有的类,将类的核心职责和装饰功能分开,可以去除相关类中的重复的装饰装饰逻辑。- 装饰模式是继承关系的一个替代
…如果使用继承会增加很多子类,而过多的子类灵活和维护性就比较差,那么装饰模式则可以解决这个问题。
- 装饰模式可以动态的扩展一个实现类的功能 -
缺点
- 因为多层装饰比较复杂,如果核心内容除了问题工作量很大,就像父类和子类,他们之间存在着继承关系,而这是我们修改了父类,那么对应的子类也需要改,所以工作量是比较大的。
- 在需要按照一定顺序进行装饰的情况下如果稍微不注意就会产生异常,不过我们可以联合创造者模式一起进行哇。
…那么我们的装饰模式和建造者模式之间有什么区别呢?
装饰模式的构造过程是不稳定的,而建造者模式的建造过程是稳定的。
…为什么装饰模式的构造过程是不稳定的?
可以看一下我们的缺点中提到了装饰层,装饰层的需求是非固定的,所以它存在自由性,就像我们在进行编译链接的时候有静态链接和动态链接一样,如果是静态链接,一开始就装好了的话则相对会稳定,而动态虽然灵活但开销大,那么这个也是同理(自我认为可以同理,如不对请多多斧正)。