`
chxiaowu
  • 浏览: 235299 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

第四个设计模式:装饰模式

 
阅读更多

第四个设计模式:装饰模式

装饰模式是对对象功能增强时,平时使用继承的一种替代方案
一.UML 示意图
二.组成部分
1.       抽象构件:原始的功能接口
2.       具体构件:具体的原始功能类
3.       装饰角色:持有具体构件类的对象,以便执行原有功能
4.       具体装饰:具体扩展的功能在这里
三.例子代码 : 使用装饰模式来演示一个对”行走”功能扩展的例子(听音乐+行走和唱歌+行走)
1. 抽象构件
package com.eekq.decorator;
 
public interface Component {
    /** 原始接口 */
    public void go();
}
2. 具体构件
package com.eekq.decorator;
 
public class ConcreteComponent implements Component {
 
    public void go() {    
        System. out .println( "行走" );
    }
 
}
3.装饰角色来了
package com.eekq.decorator;
 
public class Decorator implements Component {
    /** 持有私有的原始构件 */
    private Component component ;
 
    /** 构造子,委派给原始构件 */
    protected Decorator(Component component) {
        this . component = component;
    }
 
    /**调用原始构件功能,通常就可直接把扩展功能加在此方法中*/
    public void go() {
        this . component .go();
    }
 
}
4.具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)
(1).
package com.eekq.decorator;
 
public class ConcreteDecoratorListen extends Decorator {
 
    /** 构造子,相关初始化 */
    public ConcreteDecoratorListen(Component component) {
        super (component);
        // code is here
    }
 
    /** 商业逻辑,对原始构件功能的扩展 */
    public void go() {    
        listen( "听音乐" ); //执行扩展功能
        super .go();
    }
   
    private void listen(Object obj){
        System. out .println(obj);       
    }
 
}
(2).
package com.eekq.decorator;
 
public class ConcreteDecoratorSing extends Decorator {
 
    /** 构造子,相关初始化 */
    public ConcreteDecoratorSing(Component component) {
        super (component);
        // code is here
    }
 
    /** 商业逻辑,对原始构件功能的扩展 */
    public void go() {    
        super .go();
        System. out .println(sing());; // 执行扩展功能
    }
 
    private String sing() {
        return "唱歌" ;
    }
}
5.客户端调用
package com.eekq.decorator;
 
public class Main {
 
    public static void main(String[] args) {
        /** 原始构件 */
        Component component = new ConcreteComponent();
        /**边听音乐,边走路*/
        ConcreteDecoratorListen cdl = new ConcreteDecoratorListen(component);
        cdl.go();
        System. out .println();
        /**边走路,边唱歌*/
        ConcreteDecoratorSing cds = new ConcreteDecoratorSing(component);
        cds.go();
    }
 
}
四.总结
优点:装饰模式和继承都是对功能的扩展,而装饰模式使用的是组合,可以不用继承而达到这一效果.使用过多的继承会增加系统的复杂性和偶合性
缺点:装饰模式要产生一些辅助性的对象,但这些对象看上去都比较像,不是很容易检查(好的命名应该是提高检查的一个办法)
分享到:
评论
1 楼 leoyu 2011-10-08  
呵呵,好的

相关推荐

    设计模式:可复用面向对象软件的基础--详细书签版

    整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...

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

    第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE...

    Head First 设计模式 JAVA源码

    第四讲:工厂模式在开发中的运用 第五讲:单例模式 第六讲:原型模式 第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:观察者模式 第十一讲:享元模式 第十二讲:代理模式 第十三讲:外观...

    设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板.pptx

    logo 3组合模式:整体-部分,比如节点和树组合模式:整体-部分,比如节点和树 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第4页。 4装饰器模式:用到原来类的方法并且添加新的属性...

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

    第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE...

    设计模式课程每章ppt(共27章).zip

    └── 设计模式 ├── 01_第1章_统一建模语言基础知识.ppt ...├── 第4章_简单工厂模式.ppt ├── 第5章_工厂方法模式.ppt ├── 第6章_抽象工厂模式.ppt ├── 第7章_建造者模式.ppt ├── 第8章_原型模式.ppt

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    C#23种设计模式_示例源代码及PDF

    装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案, 装饰模式 提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由 一些基本功能的排列组合而产生...

    java设计模式

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

    《设计模式》中文版(23个设计模式的介绍与运用)

    第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE...

    php设计模式介绍

    《PHP设计模式介绍》第四章 单条模式 《PHP设计模式介绍》第五章 注册模式 《PHP设计模式介绍》第六章 伪对象模式 《PHP设计模式介绍》第七章 策略模式 《PHP设计模式介绍》第八章 迭代器模式 《PHP设计模式...

    ActionScript 3.0设计模式扫描版_方红琴译

    第4章 装饰者模式 什么是装饰者模式? 装饰者模式中使用的重要的OOP概念 抽象装饰者最小化示例 简单的装饰者模式在Flashqb的应用:纸娃娃游戏 用各种表示正义和邪恶的属性对人物进行装饰 动态地选择具体的...

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    24种设计模式的入门,整合7种开发语言的代码示例。 (C#、JAVA、JavaScript、C++、Python、Go、PHP) 第一节 设计模式:学习顺序 第二节 简单工厂模式 第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第...

    设计模式--C++

    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 描述对象的实现 10 1.6.5 运用复用机制 13 ...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    C#设计模式 C# Design Patterns:A Tutorial

    第四部分 行为型模式 第21章 职责链 第22章 命令模式 第23章 解释器模式 第24章 迭代器模式 第25章 中介者模式 第26章 备忘录模式 第27章 观察者模式 第28章 状态模式 第29章 策略模式 第30章 模板方法模式 第31章 ...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    研磨设计模式(完整带书签).part1.pdf

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    《c#设计模式》电子书+随书源码

    本书是第一部关于C#和.NET设计模式的权威指导著作,为基于C#语言和Microsoft ® .NET框架的开发人员学习设计模式和应用设计模式提供了一个完整全面的理论框架和大量的详细应用实例。 本书内容覆盖了所有23个经典的...

    Head.First设计模式_PDF.part1

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计...

Global site tag (gtag.js) - Google Analytics