相应的代码:
#include <iostream> #include <vector> #include <string> using namespace std; // base class class Beverage { public: virtual string getDescription() = 0; virtual float cost() = 0; }; // base class of condiment, also a base decorator class class CondimentDecorator : public Beverage { protected: Beverage *m_coffee; }; // coffee DarkRoast class DarkRoast: public Beverage { public: string getDescription() { return "Darkroast"; } float cost() { return 5.0; } }; // coffee Espresso class Espresso: public Beverage { public: string getDescription() { return "Espresso"; } float cost() { return 6.5; } }; // condiment milk class Milk: public CondimentDecorator { public: Milk() {} Milk(Beverage *coffee) { m_coffee = coffee; } string getDescription() { return m_coffee->getDescription() + ", Milk"; } float cost() { return m_coffee->cost() + 1.0; } }; // condiment mocha class Mocha: public CondimentDecorator { public: Mocha() {} Mocha(Beverage *coffee) { m_coffee = coffee; } string getDescription() { return m_coffee->getDescription() + ", Mocha"; } float cost() { return m_coffee->cost() + 0.5; } }; int main() { Beverage *coffee = new Espresso; coffee = new Milk(coffee); coffee = new Mocha(coffee); cout<<coffee->getDescription()<<" $"<<coffee->cost(); getchar(); return 0; }
打印出:
Esprosso, Milk, Mocha &8
相关推荐
在《Element of Reusable Object-Oriented Software》中,GOF 对装饰器模式的用意进行了概述:Decorator Pattern――Attaches additional responsibilities to an object dynamically. Decorators provide a ...
4. 具体装饰(Concrete Decorator):装饰器的实现,添加了具体组件的特定增强功能。每个具体装饰类可以添加不同的行为,从而提供多种装饰方式。 举个例子,假设我们有一个`Coffee`类,表示基础的咖啡。`Coffee`...
具体装饰器(Concrete Decorator):扩展装饰器的功能,提供额外的行为 总结 装饰模式通过在运行时动态地为对象添加功能,增强了系统的灵活性和可扩展性。它允许在不修改现有代码的情况下添加新的行为,非常适合于...
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
在实现中,装饰器模式通常遵循以下步骤: 1. 定义组件接口。 2. 创建原始组件类,实现接口。 3. 创建装饰器类,包含对组件的引用,并实现组件接口。 4. 创建具体装饰器类,扩展装饰器类,添加新的行为。 5. 在客户端...
4. **具体装饰器(Concrete Decorator)**:是装饰器的子类,可以给组件添加新的行为或扩展已有行为。比如,我们可以有一个`DecoratorA`类,它在调用原组件的`doSomething()`方法之前或之后添加一些额外的操作。 ```...
此外,装饰器模式遵循开闭原则,即对扩展开放,对修改关闭。 在C++中,装饰者模式的实现需要注意智能指针的使用,以防止内存泄漏。通常,`Decorator`会持有`std::unique_ptr<Component>`或`std::shared_ptr...
此外,装饰器模式可以用于实现复杂的组合行为,比如在图形用户界面设计中添加各种效果,或者在日志系统中动态添加不同的记录级别。通过利用装饰者模式,我们可以保持代码的灵活性和可维护性,同时避免大量的条件分支...
- **Concrete Decorator(具体装饰器)**:实现Decorator接口,并且添加新的行为到Component中。 #### 三、C++实现示例解析 下面基于给定的部分代码来详细解析装饰模式的实现过程: ```cpp #include"stdafx.h" #...
1. **组件接口(Component)**:定义了被装饰对象的公共接口,所有具体的组件(ConcreteComponent)和装饰器(Decorator)都必须实现这个接口。在示例中,`Component`类定义了一个`operation()`方法。 2. **具体...
在这个例子中,`my_decorator`是装饰器,它在调用原始函数`say_hello`前后分别添加了额外的行为。通过`@my_decorator`语法糖,我们方便地将`say_hello`函数装饰了。 接下来,我们看C++中的装饰模式实现,这通常涉及...
2. 结构型模式:包括适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、组合(Composite)和代理(Proxy)。这些模式处理对象之间的关系,改善类与类之间的耦合度。 3. ...
七、装饰器模式(Decorator) 装饰器模式动态地给对象添加新的行为或责任,它为对象添加附加功能而不影响其他对象。在C++中,通常通过继承和组合来实现。 八、适配器模式(Adapter) 适配器模式使得原本由于接口不...
装饰者模式(Decorator) 外观模式(Facade) 蝇量模式(Flyweight) 代理模式(Proxy) 行为型: 责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式...
4. **具体装饰器(Concrete Decorator)角色**: 具体装饰器为组件添加新的行为或职责。在`decorator2.cpp`和`decorator3.cpp`中,我们可以预见到它们各自实现了不同的装饰功能,如增加日志记录、性能监控等。每个...
在C++中,装饰模式通常包括四个关键角色:Component(组件),ConcreteComponent(具体组件),Decorator(装饰器)和ConcreteDecorator(具体装饰器)。Component定义了对象的接口,ConcreteComponent是Component的...
结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...
15. **解释器模式(Interpreter)**:给定一个语言,定义它的文法的一种表示,并且实现一个解释器,该解释器用于该文法的一个特定的解释程序。 16. **迭代器模式(Iterator)**:提供一种方法顺序访问一个聚合对象...
3. Decorator模式,装饰模式,动态地给一个对象添加一些额外的职责。 ***posite模式,组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。 5. Flyweight模式,享元模式,运用共享技术有效地支持大量细...
装饰器模式则通过动态地将责任添加到对象上,而无需修改其原始类。 项目PDF手册可能包含实际应用场景的案例分析,如如何在游戏开发中应用设计模式优化代码结构,或在数据库系统中使用观察者模式实现事件驱动编程。...