`
crazyox
  • 浏览: 185346 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之Decorator

阅读更多

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

问题:    你需要使用的对象执行你要求的基本功能. 但是, 你可能需要为这个对象添加某些功能, 这些附加功能可能发生在对象的基础功能之前或之后.

效果: 被添加的功能属于小的对象. 好处是可以在ConcreteComponent对象的功能之前或之后动态添加功能. 注意: 虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以ConcteteComponent对象结束.

 示例:

我们需要写一封信,但是有时候我想给这封信添加背景和边框效果,有时候只需要正文或边框或背景中的一种或任意组合(动态地给对象添加职责).如下图方式实现:

 

 

 

 想要边框和背景及正文的信时可以这样调用(注意此处BorderDecoratorLetter 和 BackgroundDecoratorLetter 实例化顺序可以改变):

new BorderDecoratorLetter(new BackgroundDecoratorLetter(new WriteLetter())).write();

想要边框和正文时可以这样调用: new BackgroundDecoratorLetter(new WriteLetter()).write();

只想要正文时可以这样调用: new WriteLetter().write();

实例2: 打印票据: 有的需要打印抬头,有的需要打印脚注,不需要打印脚注,有的需要0个或多个抬头与0个或多个脚注的组合,且对打印顺序有要求.

代码见附件.

实例3:Java IO包中的装饰模式:

java 代码
  1.    protected volatile InputStream in;   
  2.    protected FilterInputStream(InputStream in) {   
  3.        this.in = in;   
  4.    }   
  5.    public int read() throws IOException {   
  6.        return in.read();   
  7.    }  

 

 

<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#00cc99,#3333cc,#ccccff,#b2b2b2"></p:colorscheme>   new BufferedInputStream(new DataInputStream(new FileInputstream(new File("c:/a.txt"))));

DataInputStream 和 BufferedInputStream 都继承自 FilterInputStream 所以我们可以轻而易举的装饰出我们需要的流:
  • 大小: 960.1 KB
分享到:
评论

相关推荐

    设计模式之 Decorator模式和代码实现

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    JAVA设计模式chm文档

    设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之...

    二十三种设计模式【PDF版】

    设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式...

    设计模式文档 chm

    设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之...

    GoF 23种设计模式的详解与应用

    结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    设计模式 t07Decorator

    在给定的“设计模式 t07Decorator”主题中,我们聚焦于装饰者模式(Decorator Pattern)。装饰者模式是一种结构型设计模式,它允许我们在运行时给对象添加新的行为或职责,而无需修改其原有代码。这种模式遵循开闭...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

    分析Python中设计模式之Decorator装饰器模式的要点

    Python中的装饰器模式是一种设计模式,它允许在不修改原有对象的情况下向其添加新的功能。装饰器模式在Python中有着广泛的应用,特别是在处理诸如认证、权限检查、日志记录、参数检查、同步加锁等与核心业务逻辑无关...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...

    java设计模式之Builder&Decorator

    Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...

    设计模式C++学习之装饰模式(Decorator)

    装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    大话西游之设计模式_从猴王学艺看Decorator 配套代码

    "大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影《大话西游》中的故事相结合,以生动有趣的方式讲解了Decorator模式。猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过...

Global site tag (gtag.js) - Google Analytics