一、前言
装饰模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时也是继承关系的一种替代方案之一。装饰模式中装饰物也许各不相同但是装饰的对象本质是不变的。
二、定义
在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象功能)。
三、适用场景
扩展一个类的功能或给一个类添加附加职责。
四、相关设计模式
1、装饰者模式和代理模式
装饰者模式关注在对象上动态的添加,代理模式控制对对象的访问,代理类可以对他的客户隐藏对象的具体信息,使用代理模式的时候通常在代理类中创建一个对象的实例。而在使用装饰者模式的时候,通常会把原始对象作为一个参数传给装饰者的构造器。
2、装饰者模式和适配器模式
装饰者模式和适配器模式都可以叫做包装模式,装饰者和被装饰者可以实现相同的接口,或者装饰者是被装饰者的子类。在适配器模式中,适配器和被适配的类有不同的接口。
五、代码实战
引入一个场景,上班晚了公司楼下有卖煎饼的,买个煎饼,在公司茶水间吃早餐,有时候加个蛋有时候加根肠,那我们想一下商家在卖煎饼的时候加肠、加蛋的价格是怎么计算的。
UML类图:
屏幕快照 2019-04-30 上午11.24.45.png
六、总结
1、优点
(1)继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能。
(2)通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。
(3)符合开闭原则
2、缺点
(1)会出现更多的diamanté,更多的类,增加程序复杂性。
(2)动态装饰时,多层装饰时会更复杂。
网友评论