装饰模式介绍
通过使用修饰模式,可以在运行时扩充一个类的功能。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。
装饰模式组成
1、抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
2、具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
3、装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
4、具体装饰(ConcreteDecorator)角色:负责给构件对象"贴上"附加的责任(附件的功能)。
装饰模式
类图
Decorator模式有以下的优缺点:
1. 比静态继承更灵活 与对象的静态继承相比,Decorator模式提供了更加灵活的向对象添加职责的方式,可以使用添加和分离的方法,用装饰在运行时刻增加和删除职责。使用继承机制增加职责需要创建一个新的子类,如果需要为原来所有的子类都添加功能的话,每个子类都需要重写,增加系统的复杂度,此外可以为一个特定的Component类提供多个Decorator,这种混合匹配是适用继承很难做到的。
2. 避免在层次结构高层的类有太多的特征,Decorator模式提供了一种“即用即付”的方法来添加职责,他并不试图在一个复杂的可订制的类中支持所有可预见的特征,相反可以定义一个简单的类,并且用Decorator类给他逐渐的添加功能,可以从简单的部件组合出复杂的功能。
3. Decorator 与它的Component不一样 Decorator是一个透明的包装,如果我们从对象标识的观点出发,一个被装饰了的组件与这个组件是有差别的,因此使用装饰时不应该以来对象标识。
4. 产生许多小对象,采用Decorator模式进行系统设计往往会产生许多看上去类似的小对象,这些对象仅仅在他们相互连接的方式上有所不同。
.什么时候使用
- 需要动态的扩展一个类,这些扩展也可以动态的撤销,并保持原有类的静态定义的情况。
- 需要增加由一些基本功能排列组合贰产生的非常强大的功能,并使继承关系变得不实现,典型的Wrapper应用。
总之 Decorator模式在项目维护中阔转功能是个不错的选择,比继承更灵活,更符合写代码的原则
- 大小: 21.7 KB
分享到:
相关推荐
java设计模式之装饰者模式代码
设计模式 c# 装饰模式
软件设计模式之装饰模式讲解ppt,可用于教学课件。
54-Spring设计模式之装饰器模式1
JAVA设计模式之装饰模式代码
设计模式--装饰者模式java例子
java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式
Qt设计模式之装饰者模式
C#设计模式之Decorator 装饰模式,pdf+视频教学,实例演示,易学易用~~
装饰者模式是在不改变原有类和不使用继承的情况下,动态地扩展一个对象的功能,代码中通过对象参数进行选择。
设计模式之装饰者模式,极客学院VIP课堂的课件,装饰者模式的示例
设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)
设计模式 - 装饰模式(C++实例) 若有问题,请指出。
c# ,设计模式,装饰者模式,星巴兹咖啡,基本上就是head first 上的例子的C#实现,根据自己的理解,作了一点点改动,可以直接运行。
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
设计模式之装饰模式 Java代码实现;另由本人所写,转载请注明原址。
在软件的设计中请使用到三种以上设计模式。 1.2 画图基本要求 能实现基本图形的绘制功能,包括实现绘制直线、三角形和圆形,并有装饰;修改绘图笔颜色。 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小...
设计模式—装饰者模式