设计模式(3)——装饰者模式

本文介绍了装饰者模式的概念、类图及应用场景。装饰者模式能够动态地给对象增加职责,相较于继承更加灵活。文章还探讨了该模式的优缺点。

1. 定义

    The Decorator Pattern attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

(装饰者模式可以动态地给一个对象增加其他职责。就扩展对象功能来说,装饰者模式比生成子类更为灵活。)

 

2. 类图及描述

Component(被装饰对象基类)  

l         定义对象的接口,可以给这些对象动态增加职责;

ConcreteComponent(具体被装饰对象)
l         定义具体的对象,Decorator可以给它增加额外的职责;

Decorator(装饰者抽象类)

l         维护一个指向Component实例的引用,并且定义了与Component一致的接口;

ConcreteDecorator(具体装饰者)
l         具体的装饰对象,给内部持有的具体被装饰对象增加具体的职责;

 

3. 应用场景及优缺点

    装饰者模式的应用场景:

(1)  想透明并且动态地给对象增加新的职责的时候。

(2)  给对象增加的职责,在未来存在增加或减少可能。

(3)  用继承扩展功能不太现实的情况下,应该考虑用组合的方式。

    装饰者模式的优点:

(1)  通过组合而非继承的方式,实现了动态扩展对象的功能的能力。

(2)  有效避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题。

(3)  充分利用了继承和组合的长处和短处,在灵活性和扩展性之间找到完美的平衡点。

(4)  装饰者和被装饰者之间虽然都是同一类型,但是它们彼此是完全独立并可以各自独立任意改变的。

(5)  遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

    装饰者模式的缺点:
(1)  装饰链不能过长,否则会影响效率。

(2)  因为所有对象都是Component,所以如果Component内部结构发生改变,则不可避免地影响所有子类(装饰者和被装饰者),也就是说,通过继承建立的关系总是脆弱地,如果基类改变,势必影响对象的内部,而通过组合(Decoator HAS A Component)建立的关系只会影响被装饰对象的外部特征。

(3)只在必要的时候使用装饰者模式,否则会提高程序的复杂性,增加系统维护难度。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值