结构型模式之Decorator模式

1、意图

动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活

2、适用性

以下情况使用Decorator模式

(1)在不影响期货对象的情况下,以动态、透明的方式给单个对象添加职责

(2)处理那些可以撤消的职责

(3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况 可能是因为类定义被隐藏,或类定义不能用于生成子类。

3、参与者

(1)Component:定义一个对象接口,可以给这些对象动态地添加职责

(2)ConcreteComponent:定义一个对象,可以给这个对象添加一些职责

(3)Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。

(4)ConcreteDecorator:向组件添加职责

4、协作

Decorator钭请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。

5、效果

Decorator模式至少有两个主要优点和两个缺点:

(1)比静态继承更灵活:与对象的静态继承相比,Decorator模式提供了更加灵活的向对象添加职责的方式。可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。相比之下,继承机制要求为每个添加的职责创建一个新的子类。这会产生许多新的类,并且会增加系统的复杂度。此外,为一个特定的Component类提供多个不同的Decorator类,这就使得你可以对一些职责进行混合和匹配。

(2)避免在层次结构高层的类有太多的特征:Decorator模式提供了一种“即用即付”的方法来添加职责。它并不试图在一个复杂的可定制的类中支持所有可预见的特征,相反,你可以定义一个简单的类,并且用Decorator类给它逐渐地添加功能。可以从简单的部件组合出复杂的功能。这样,就用程序不必为不需要的特征付出代价。同时也更易于不依赖于Decorator所扩展的类而独立地定义新类型的Decorator。扩展一个复杂类的时候,很可能会暴露与添加的职责无关的细节。

(3)Decorator与它的Component不一样: Decorator就一个透明的包装。如果我们从对象标识的观点出发,一个被装饰的了 组件与这个组件是有差别的。因此,使用装饰时不应该依赖对象标识。

(4)有许多小对象:采用Decorator械进行系统设计往往会产生许多看上去类似的小对象,这些对象仅仅在他们相互连接的方式 上有所不同,而不是它们的类或是它们的属性值有所不同。尽管对于那些了解这些系统的人来说,很容易以它们进行定制,但是很难学习这些系统,排错也很困难。

6、相关模式

Decorator模式不同于Adapter模式,因为装饰仅改变对象的职责而不改变它的接口,而适配器将给对象一个全新的接口

 Composite模式可以将装饰视为一个退化的、仅有一上组件的组合。然而,装饰仅给对象添加一额外的职责

Strategy模式:用一个装饰你可能改变对象的外表,而Strategy模式使得你可以改变对象的内核。这个改变对象的两种途径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值