`
jefferent
  • 浏览: 80425 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

设计模式(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)只在必要的时候使用装饰者模式,否则会提高程序的复杂性,增加系统维护难度。

 

分享到:
评论

相关推荐

    C#设计模式——装饰模式应用实例

    C#设计模式——装饰模式应用实例,开发一套图形界面构件库的框架实例。

    JAVA设计模式学习12——装饰器模式

    NULL 博文链接:https://alaric.iteye.com/blog/1911949

    设计模式——装饰模式

    NULL 博文链接:https://maidoudao.iteye.com/blog/1336072

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    深入浅出设计模式三——Beverage实现(装饰者模式)

    NULL 博文链接:https://quicker.iteye.com/blog/607122

    Java设计模式 版本2

    对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...

    Java设计模式-装饰者模式

    本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧...——《Head First 设计模式》

    设计模式可复用面向对象软件的基础.zip

    1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象...

    装饰者模式——Decorator

    NULL 博文链接:https://chuanwang66.iteye.com/blog/1325151

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    Pattern-Decorator-Java:设计模式工作坊——装饰者模式

    您必须实现装饰器模式,以便可以在运行时添加提到的服务。 作为开发服务如何工作的示例,在运行时创建一个用加密和缓存装饰的 JSON 策略,以及一个带有日志记录的 XML 策略。 请记住,您必须提供源代码和详细说明所...

    装饰设计模式——RecyclerView添加头部和底部-附件资源

    装饰设计模式——RecyclerView添加头部和底部-附件资源

    设计模式精解 译者:熊节 程序员必看书籍之一 part2

    设计模式精解(Design Patterns Explained) ...如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    深入浅出设计模式(中文版)

    1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者) 13 2.3LowCoupling...

    design-pattern-java.pdf

    扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...

    深入浅出设计模式(中文版电子版)

    1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者) 13 2.3LowCoupling...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    .NET中的设计模式——一步步发现装饰模式

    学习设计模式的基本目标是要用它,尤其是帮助那些有扎实的OOP基础,而对设计模式很困惑的人在设计中应用它。我不会为不同设计模式写很全面的参考,但我希望这些文章能让你入门。设计模式与特定的语言无关。虽然我用...

    设计模式精解-掌握设计模式

    本书从一个新的视角描述面向对象设计,将...\r\n 如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。\r\n 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

Global site tag (gtag.js) - Google Analytics