`

[原]装饰模式1

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,decorator,装饰模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:


package pattern.decorator;

/**
 * 装饰模式:Decorator Pattern
 * @version 2009-6-5
 * @author Winty(wintys@gmail.com)
 */
public class DecoratorTest{
    public static void main(String[] args){
        Component component;
        component = new ConcreteComponent();
        component.doSomething();
        System.out.println("");
        
        //透明的装饰模式
        Component decorator;
        decorator = new ConcreteDecorator(component);
        decorator.doSomething();
        System.out.println("");

        //半透明的装饰模式
        ConcreteDecorator decorator2;
        decorator2 = new ConcreteDecorator(component);
        decorator2.doSomething();
        decorator2.doOtherThings();
    }
}


/**
 * 抽象构件:Component
 */
interface Component{
    public abstract void doSomething();
}

/**
 * 具体构件:ConcreteComponent
 */
class ConcreteComponent implements Component{
    @Override
    public void doSomething(){
        System.out.println("do something");
    }
}

/**
 * 装饰:Decorator
 */
abstract class Decorator implements Component{
    private Component comp;

    public Decorator(Component comp){
        this.comp = comp;
    }

    @Override
    public void doSomething(){
        comp.doSomething();
    }
}

/**
 * 具体装饰:ConcreteDecorator
 */
class ConcreteDecorator extends Decorator{
    public ConcreteDecorator(Component comp){
        super(comp);
    }

    @Override
    public void doSomething(){
        super.doSomething();
        doMoreThings();
    }

    private void doMoreThings(){
        System.out.println("do more things.");
    }

    /**
     * 新增的方法不是Component接口的一部分,
     * 所以不能通过Component接口透明地访问。
     */
    public void doOtherThings(){
        System.out.println("do other things.");
    }
}
  • 大小: 46.5 KB
分享到:
评论

相关推荐

    装饰模式小猪快跑游戏模拟

    装饰模式的一个简单实例,小猪吃苹果的游戏,每吃一种苹果,增加一种不同的功能。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】 * 测试类【之】煎饼果子来一套 * * 不改变原有对象的基础上,强化已经存在的功能 * 被装饰者与装饰者实现同一个抽象或接口 * 装饰后,最终还是...

    python使用装饰器(Decorator)的方式实现单例模式

    demo python使用装饰器(Decorator)的方式实现单例模式 functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 ...

    易语言对象模式之一装饰器模式,不修改程序结构下而添加新的功能

    装饰器模式,在不修改原程序结构的情况下,而动态的实现添加或者修改新的功能,有点类似注入的感觉。@清秀男儿。

    .NET装饰模式讲解

    装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰者模式结构图: 装饰者模式角色: (1)抽象构件(Component)角色:给...

    Javascript设计模式之装饰者模式详解篇

    装饰者模式(Decorator Pattern):在不改变原类和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象。 装饰者模式的特点: 1. 在不改变原对象的原本结构的情况下进行功能...

    PHP设计模式之装饰器模式实例详解

    装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 UML类图: 角色: 组件对象的接口:可以给这些对象动态的添加职责 所有装饰...

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

    英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价: ¥35.00 会员价: ¥31.50 币值: 315 ...

    PHP设计模式之装饰者模式代码实例

    装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。 角色: Component...

    学习JavaScript设计模式之装饰者模式

    那么我们就可以使用装饰着模式。 装饰着模式可以动态地给某个对象添加一些额外的职责,从而不影响这个类中派生的其他对象。 装饰着模式将一个对象嵌入另一个对象之中,实际上相当于这个对象被另一个对象包装起来,...

    Ruby设计模式(中文版+英文版).pdf

    Ruby设计模式的中文pdf高清扫描版本和英文原版本pdf文件。 本书是一本关于设计模式方面的重点书籍。本书以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察...

    装饰类模式代码示例(Java)

    代码为个人手写,原属于本人某次实验的一部分,可能存在bug,仅供参考。相关博客地址:https://blog.csdn.net/l1393452711/article/details/106421348

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

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

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

    4.4 decorator(装饰)—对象结构型 模式 115 4.5 facade(外观)—对象结构型 模式 121 4.6 flyweight(享元)—对象结构型 模式 128 4.7 proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 ...

    Java设计模式菜鸟系列教程

    博客原地址:http://blog.csdn.net/lhy_ycu/article/details/40031567

    java设计模式选择题复习题.doc

    装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完 成使用。(增加新接口的装饰者模式可以认为是其变种--"半透明"装饰者) 3.关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或...

    Head First(Design Patterns) 设计模式英文原版

     1设计模式入门欢迎来到设计模式世界  2观察者模式让你的对象知悉现况  3装饰者模式装饰对象  4工厂模式烘烤OO的精华  5单件模式独一无二的对象  6命令模式封装调用  7适配器模式与外观模式随遇...

    php装饰者模式简单应用案例分析

    装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 示例: A、B、C编辑同一篇文章。 class Article{ protected $content;...

Global site tag (gtag.js) - Google Analytics