摩卡

设计模式之装饰者模式

半世苍凉 提交于 2020-02-18 08:16:25
什么是装饰者模式? 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。 Component:一般是一个抽象类(也有可能不是),是一组有着某种用途类的基类,包含着这些类最基本的特性。 ConcreteComponent:继承自Component,一般是一个有实际用途的类,这个类就是我们以后要装饰的对象。 Decorator:继承自Component,装饰者需要共同实现的接口(也可以是抽象类),用来保证装饰者和被装饰者有共同的超类,并保证每一个装饰者都有一些必须具有的性质,如每一个装饰者都有一个实例变量(instance variable)用来保存某个Component类型的类的引用。 ConcreteDecorator:继承自Decorator,用来装饰Component类型的类(不能装饰抽象类),为其添加新的特性,可以在委托被装饰者的行为完成之前或之后的任意时候。 下面我们以星巴兹咖啡订单管理系统 管理、计算各种饮料的售价为例,对装饰者模式展开讨论。 设计思路及代码实现 继承 可能我们的第一印象就是继承。 首先定义一个咖啡基类 对于加糖的,加牛奶的,加摩卡的 ,加奶泡的,分别写一个子类继承 对于加糖,又加奶的写一个类,对于对于加糖,又摩卡的写一个类,对于对于加糖、又奶泡的写一个类,对于加糖,又加奶、摩卡的写一个类。

Kotlin设计模式实现之装饰者模式(Decorator)

你离开我真会死。 提交于 2020-01-02 09:39:59
前言 今天是2020年的第一天,在这里祝大家元旦快乐!之前用 kotlin实现了策略模式 ,文中写到要多写几篇文章来加深以下对设计模式的理解。那么今天要写的看题目应该就知道了:装饰者模式(也叫装饰模式)。下面是装饰者模式的定义: 装饰者模式(Decorator) :在不改变对象自身的基础上,动态地给一个对象添加一些额外的职责。与继承相比,装饰者是一种更轻便灵活的做法。若要扩展功能,装饰者提供了比继承更有弹性的替代方法。 故事场景 小星刚毕业,到一家公司实习。今天来到公司后,一如既往地开始编写它的增删改查。 刚刚坐下打开电脑,技术锦鲤走了过来,小星内心开始发牢骚(锦鲤来干啥,每回它来都没好事)。锦鲤告诉小星,公司想要编写一个卖咖啡的系统,有不同种类的咖啡,需要能计算出咖啡的钱和区分咖啡的类别。 小星:没问题,很简单。 十分钟后,小星写出了它的第一版代码: 咖啡的基类: abstract class Beverage(var description: String = "Unknown Beverage") { //描述 open fun getDescriptions():String{ return description } //价钱 abstract fun cost():Double } 其他咖啡(子类): /** * 深度烘焙咖啡(星巴克) * * @author