Decorator(装饰)---对象结构型模式

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

有时我们希望给某个对象而不是整个类添加一些功能。使用继承机制是添加功能的一种有效途径,从其他类继承过来的可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。

一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。

以下情况使用Decorator模式:

1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

2、处理那些可以撤销的职责。

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

Decorator模式的优点和缺点:

1、比静态继承更灵活。与对象的静态继承相比,Decorator模式提供了更加灵活的向对象添加职责的方式。

2、Decorator模式提供了一种“即用即付”的方式来添加职责。它不试图在一个复杂的可定制的类中支持所有可预见的特征,相反,你可以定义一个简单的类,并且用Decorator类给它逐渐地添加功能。可以从简单的部件组合出复杂的功能。

 

装饰对象的接口必须与它所装饰的Component的接口是一致的,因此,所有的ConcreteDecorator类必须有一个公共的父类。保持父类的简单性是很重要的,它应集中于定义接口而不是存储数据。

 

Decorator模式改变对象外壳。Strategy模式改变对象内核。这是改变对象行为的两种途径。

由于Decorator模式仅从外部改变组件,因此组件无需对它的装饰有任何了解,这些装饰对该组件是透明的。

在Strategy模式中,component组件本身知道可能进行哪些扩充,因此它必须引用并维护相应的策略。基于Strategy的方法可能需要修改component组件以适应新的扩充。一个策略可以有自己特定的接口,而装饰的接口则必须与组件的接口一致。

 

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

Composite模式:可以将装饰视为一个退化的、仅有一个组件的组合。然而,装饰仅给对象添加额外的职责,它的目的步子与对象聚集。

Strategy模式:用一个装饰你可以改变对象的外表;而Strategy模式使得你可以改变对象的内核。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值