`
mmdev
  • 浏览: 12917201 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

装饰模式

 
阅读更多

装饰模式应用场景举例

比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设现在喷涂鸦具有2种样式:(1)红色火焰 (2)紫色霞光如果使用“继承父类”设计这样的功能,那么类图就像如下的这样:

从图中可以看到使用继承来实现这种功能,并且是2种涂鸦样式,就需要创建4个子类,如果喷涂鸦有3种,4种呢?这种情况就是典型中学课程学习过的“排列与组合”,那简直就是“Head First设计模式”书中讲的“类爆炸”。

显然继承“奥迪汽车类”的这个办法是无效,而且是非常徒劳,繁琐的。

那么如何才能以“灵活”,“顺序敏感”这样的需求来实现这样的功能呢?

装饰模式解释

类型:结构模式

动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。

装饰模式UML图

装饰模式-JAVA代码实现

新建一个抽象汽车父类:


然后新建一个奥迪汽车子类


然后再新建一个装饰者父类:


然后再新建装饰者子类:红色火焰装饰者类:


然后再新建装饰者子类:紫色霞光装饰者类:


新建一个运行类


程序运行结果如下:


从程序结构中可以看到,完全符合了前面我们的要求: “灵活”,“顺序敏感”。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics