设计模式 -- 装饰模式

2021-08-08  本文已影响0人  benlue

场景:

假如现在我们需要在不改变类的情况下,给类的添加一些不同的功能 ,那要怎么做更好?


装饰模式的概念

核心: 动态地给对象增加额外功能
也就是说,在不改变类原有功能的情况下额外给类扩展原有的功能。

很多时候,我们会想,能不能在不增加子类的情况下拓展本类?
此时装饰者模式就有很大的用武之地。


image.png

实现:

代码实现

Shape

image.png

ShapeDecorator

image.png
image.png

ChineseShape

JapaneseShape

CountryShapeDecorator

方法的实际调用

image.png

总结:

从上面的图和讲解可以看到,ShapeDecorator 实际上它本身是不会去实现Shape的抽象方法的具体实现的,它只是提供了接口去调用其他实现了Shape抽象方法的类。所以ShapeDecorator 被称为 装饰者,而这个模式也被称“装饰者模式”。

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:本次实现模型只是单层的装饰,假如引入了多层装饰,那么结构就会非常复杂,而实现很抽象,不容易理解。

装饰者模式继承模式 的一个很好的替代品,对比生成子类更加灵活

上一篇下一篇

猜你喜欢

热点阅读