装饰者模式
来源:互联网 发布:托福听力软件推荐 编辑:程序博客网 时间:2024/06/05 23:00
简述
装饰者模式(Decorator Pattern)是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
模式结构
UML 结构图:
- 抽象构件(Component):给出一个抽象接口,以规范准备接收附加责任的对象。
- 具体构件(ConcreteComponent):定义一个将要接收附加责任的类。
- 装饰(Decorator):持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
- 具体装饰(ConcreteDecorator):负责给构件对象添加上附加的责任。
优缺点
优点:
- Decorator 模式与继承关系的目的都是要扩展对象的功能,但是 Decorator 可以提供比继承更多的灵活性。
- 通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。
缺点:
- 这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。
- 装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。
- 装饰模式是针对抽象构建(Component)类型编程。但是,如果要针对具体构件(ConcreteComponent)编程,应该重新思考应用架构,以及装饰者是否合适。当然也可改变 Component 接口,增加新的公开的行为,实现“半透明”的装饰者模式。在实际项目中要做出最佳选择。
适用场景
- 需要扩展一个类的功能,或给一个类添加附加职责。
- 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
- 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
- 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
阅读全文
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- Eclipse启动项目时,删除workspaces无用的工作区间
- JavaSwing_2.3: JRadioButton(单选按钮)
- python中UnicodeEncodeError和ImportError
- spring的事务原理
- 文件输入/输出流
- 装饰者模式
- java鬼混笔记:压缩文件生成zip
- AngularJS-4-循环绑定
- JavaSwing_2.4: JCheckBox(复选框)
- 用终端删除掉忽略文件的前缀
- 【出圈】
- JavaSwing_2.5: JToggleButton(开关按钮)
- UML类图五种关系与代码的对应关系
- 中断响应,重入锁