设计模式之装饰模式(一)

165 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

看了前边的内容,相信大家对设计模式应该有了初步的认识了吧,今天呢,阿Q就给大家讲一下装饰模式的原理与使用方法。

同样,我们先了解一下装饰模式的概念吧。装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

何时使用:

1)需要扩展一个类的功能,或给一个类增加附加责任。

2)需要动态的给一个对象增加功能,这些功能可以再动态地撤销。

3)需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得不现实。

角色组成:

  • 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  • 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类
  • 装饰角色(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口
  • 具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任

接下来用一个小例子给大家讲一下装饰模式的使用。

案例:相信大家都喝过奶茶吧,奶茶的种类有很多种,比如有巧克力奶茶,QQ奶茶,茉香奶茶等;然而奶茶中又可以加珍珠,红豆,布丁等不同的甜品。奶茶店现在要卖各种口味的奶茶,如果不使用装饰模式,那么在销售系统中,各种不一样的奶茶都要产生一个类,如果有5种奶茶类,5种甜品,那么就会产生至少25个类(不包括混合口味),如果使用了装饰模式,那么几个类就可以搞定了。

大家先思考一下如果是你的话你会怎么实现呢?如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!