软件设计模式 | 结构型之装饰者模式详解

目录

    • 星巴兹咖啡的故事
    • 装饰者模式
      • 一、模式介绍
      • 二、模式实现
      • 三、模式设计
      • 四、模式的优缺点
      • 五、使用场景:
      • 六、装饰者用到的设计原则:

星巴兹咖啡的故事

  1. 现在有一个咖啡馆,他有一套自己的订单系统,当顾客来咖啡馆的时候,可以通过订单系统来点自己想要的咖啡。他们原先的设计是这样子的:

  2. 这时,有个人提出了新的方案,利用实例变量和继承,来追踪这些调料。具体为:先从Beverage基类下手,加上实例变量代表是否加上调料(牛奶、豆浆、摩卡、奶泡……)


装饰者模式

一、模式介绍

??装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

??这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

??我们通过下面的实例来演示装饰器模式的用法。


二、模式实现

以摩卡和奶泡深焙咖啡为例:

步骤:

  1. 拿到一个深焙咖啡(DarkRoast)对象
  2. 以摩卡(Mocha)对象去装饰它
  3. 以奶泡(Whip)对象去装饰它
  4. 调用 cost() 方法

图示步骤:

  1. 拿到一个深焙咖啡(DarkRoast)对象

  2. 顾客要奶泡(Whip),所以建立 Whip 对象,并用它将以 Mocha 装饰的 DarkRoast 对象装起来


    三、模式设计

    装饰者模式的模板类图:

    Beverage : 抽象饮料类

    具体饮料类:被装饰者,包括:独家调配的咖啡(HouseBlend)、深焙咖啡(DarkRoast)、浓缩咖啡(Espresso)、低咖啡因咖啡类(Decaf)

    Dector : 装饰者共同实现的接口

    ConcreteDecorator : 具体的装饰者,包括:牛奶(Milk)、摩卡(Mocha)、豆浆(Soy)、奶泡(Whip)

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月3日
下一篇 2021年1月3日

相关推荐