`

设计模式(四)--装饰器模式

阅读更多

装饰器模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

 

意图:将一个接口转换为另一个接口 

 

设计原则:开闭原则(对类的扩展开放,对修改关闭)

 

装饰器模式设计要点:

1.装饰者和被装饰对象有相同的超类型

2.可以用一个或者多个装饰者去包装一个对象

3.装饰者可以在所委托被装饰者的行为之前或者之后,加上自己的行为,已达到特定的目的

 

/**
 * Created by Administrator on 2017/12/10.
 * 饮料类
 */
public abstract class Beverage {
    protected String desc;
    public String getDesc(){
        return desc;
    }
    protected abstract double cost();
}

 

 

/**
 * Created by Administrator on 2017/12/10.
 * 调料装饰器
 */
public abstract class CondimentDecorator  extends Beverage{
    public abstract String getDesc();
}

 

/**
 * Created by Administrator on 2017/12/10.
 *HouseBlend coffee
 */
public class HouseBlend extends Beverage {
    public HouseBlend() {
        desc = "houseBlend";
    }

    @Override
    protected double cost() {
        return 10;
    }
}

 

/**
 * Created by Administrator on 2017/12/10.
 * 用Mocha去装饰饮料
 */
public class Mocha extends CondimentDecorator {
    private Beverage beverage;

    public Mocha(Beverage beverage) {
        this.beverage = beverage;
    }

    @Override
    public String getDesc() {
        return beverage.getDesc() + " Mocha ";
    }

    @Override
    protected double cost() {
        //可以在这里做一些事情
        double price = 6;
        price = beverage.cost() + price;
        return price;
    }
}

 

/**
 * Created by Administrator on 2017/12/10.
 */
public class TestDecorator {
    public static void main(String[] args) {
        Beverage beverage = new HouseBlend();
        beverage = new Mocha(beverage); //用mocha去装饰coffee
        System.out.println(beverage.cost() + "," + beverage.getDesc());
        beverage = new Mocha(beverage); //两次用Mocha去装饰coffee
        System.out.println(beverage.cost() + "," + beverage.getDesc());
    }
}

 

 

 

0
0
分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出的。这本书详细阐述了23种设计...

    C++设计模式--基于Qt4开源跨平台开发框架

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...

    设计模式--装饰者模式java例子

    1. **组件(Component)**:定义了对象的接口,也就是所有被装饰对象和装饰器对象必须共同遵循的公共行为。这个接口使得装饰者和被装饰的对象可以互换,实现了无缝对接。 2. **具体组件(Concrete Component)**:...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    c++设计模式-结构型模式-装饰器模式

    c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或职责,同时保持对象的接口不变。这种模式使得我们可以在不修改原有代码的基础上,通过组合不同的装饰来扩展对象的功能,实现了代码的高可...

    设计模式---装饰者模式

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码或创建子类。这种模式的核心思想是通过将对象封装在一个装饰器对象内,来扩展对象的功能,同时保持原有接口的不变...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者模式(Observer Pattern)、责任链...

    设计模式课件大全

    设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责,可以独立于其他对象扩展功能。 - 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。 3. 行为型模式(Behavioral Patterns): ...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    - 装饰器模式:动态地给一个对象添加一些额外的职责。 - 适配器模式:将一个类的接口转换成客户希望的另一个接口。 - 协同类模式:让类的功能增强,但又不破坏封装性。 3. **行为型模式**: - 责任链模式:将...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    设计模式-装饰器模式

    装饰器模式是一种结构型设计模式,它允许在不修改对象本身的情况下动态地为对象添加新的行为或职责。这种模式在软件工程中广泛应用,特别是在需要扩展已有功能而不影响原有代码结构时。在iOS开发中,装饰器模式同样...

    23种设计模式--装饰模式

    装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...

    新版设计模式手册 - C#设计模式(第二版)

    包括适配器模式、桥接模式、装饰器模式、外观模式、组合模式、享元模式和代理模式。C#中的接口实现和委托机制为实现这些模式提供了便利。 3. 行为型模式:关注对象之间的职责分配和通信。比如命令模式、解释器模式...

    【Java设计模式-源码】装饰器模式:动态扩展类的功能

    ## 一、概述 装饰器模式允许在不修改对象现有... - 在面向对象编程中,装饰器模式是一种设计模式,它允许静态或动态地向单个对象添加行为,而不会影响同一类的其他对象的行为。装饰器模式通常对于遵循单一职责原则非

    设计模式--装饰模式

    装饰模式(Decorator Pattern)是一种结构型设计模式,其主要目的是在不改变对象自身的基础上,在运行时为对象添加新的行为或属性。它通过包装原有对象,而不是通过继承来扩展功能,从而提供了更大的灵活性,避免了...

Global site tag (gtag.js) - Google Analytics