`
东边日出西边雨
  • 浏览: 262659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

装饰器模式Decorator(c++)

 
阅读更多

 



 

相应的代码:

#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

 

  • 大小: 46.1 KB
分享到:
评论

相关推荐

    装饰器(Decorator)模式

    在《Element of Reusable Object-Oriented Software》中,GOF 对装饰器模式的用意进行了概述:Decorator Pattern――Attaches additional responsibilities to an object dynamically. Decorators provide a ...

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

    4. 具体装饰(Concrete Decorator):装饰器的实现,添加了具体组件的特定增强功能。每个具体装饰类可以添加不同的行为,从而提供多种装饰方式。 举个例子,假设我们有一个`Coffee`类,表示基础的咖啡。`Coffee`...

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

    具体装饰器(Concrete Decorator):扩展装饰器的功能,提供额外的行为 总结 装饰模式通过在运行时动态地为对象添加功能,增强了系统的灵活性和可扩展性。它允许在不修改现有代码的情况下添加新的行为,非常适合于...

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

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

    设计模式 - 装饰模式(C++实例)

    在实现中,装饰器模式通常遵循以下步骤: 1. 定义组件接口。 2. 创建原始组件类,实现接口。 3. 创建装饰器类,包含对组件的引用,并实现组件接口。 4. 创建具体装饰器类,扩展装饰器类,添加新的行为。 5. 在客户端...

    C++ Decorator模式

    4. **具体装饰器(Concrete Decorator)**:是装饰器的子类,可以给组件添加新的行为或扩展已有行为。比如,我们可以有一个`DecoratorA`类,它在调用原组件的`doSomething()`方法之前或之后添加一些额外的操作。 ```...

    Headfirst(三)装饰者模式C++实现

    此外,装饰器模式遵循开闭原则,即对扩展开放,对修改关闭。 在C++中,装饰者模式的实现需要注意智能指针的使用,以防止内存泄漏。通常,`Decorator`会持有`std::unique_ptr&lt;Component&gt;`或`std::shared_ptr...

    装饰者模式 C++ 实现

    此外,装饰器模式可以用于实现复杂的组合行为,比如在图形用户界面设计中添加各种效果,或者在日志系统中动态添加不同的记录级别。通过利用装饰者模式,我们可以保持代码的灵活性和可维护性,同时避免大量的条件分支...

    C++装饰模式

    - **Concrete Decorator(具体装饰器)**:实现Decorator接口,并且添加新的行为到Component中。 #### 三、C++实现示例解析 下面基于给定的部分代码来详细解析装饰模式的实现过程: ```cpp #include"stdafx.h" #...

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

    1. **组件接口(Component)**:定义了被装饰对象的公共接口,所有具体的组件(ConcreteComponent)和装饰器(Decorator)都必须实现这个接口。在示例中,`Component`类定义了一个`operation()`方法。 2. **具体...

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

    在这个例子中,`my_decorator`是装饰器,它在调用原始函数`say_hello`前后分别添加了额外的行为。通过`@my_decorator`语法糖,我们方便地将`say_hello`函数装饰了。 接下来,我们看C++中的装饰模式实现,这通常涉及...

    深入浅出设计模式 C++ 源码 + 设计模式 C++

    2. 结构型模式:包括适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、组合(Composite)和代理(Proxy)。这些模式处理对象之间的关系,改善类与类之间的耦合度。 3. ...

    C++设计模式源码C++设计模式源码

    七、装饰器模式(Decorator) 装饰器模式动态地给对象添加新的行为或责任,它为对象添加附加功能而不影响其他对象。在C++中,通常通过继承和组合来实现。 八、适配器模式(Adapter) 适配器模式使得原本由于接口不...

    C++设计模式(Design Pattern)范例源代码

    装饰者模式(Decorator) 外观模式(Facade) 蝇量模式(Flyweight) 代理模式(Proxy) 行为型: 责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式...

    C++设计模式代码资源6_装饰模式.zip

    4. **具体装饰器(Concrete Decorator)角色**: 具体装饰器为组件添加新的行为或职责。在`decorator2.cpp`和`decorator3.cpp`中,我们可以预见到它们各自实现了不同的装饰功能,如增加日志记录、性能监控等。每个...

    设计模式C++ 源代码,装饰模式

    在C++中,装饰模式通常包括四个关键角色:Component(组件),ConcreteComponent(具体组件),Decorator(装饰器)和ConcreteDecorator(具体装饰器)。Component定义了对象的接口,ConcreteComponent是Component的...

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

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

    C++ 23种设计模式.zip

    15. **解释器模式(Interpreter)**:给定一个语言,定义它的文法的一种表示,并且实现一个解释器,该解释器用于该文法的一个特定的解释程序。 16. **迭代器模式(Iterator)**:提供一种方法顺序访问一个聚合对象...

    设计模式C++版

    3. Decorator模式,装饰模式,动态地给一个对象添加一些额外的职责。 ***posite模式,组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。 5. Flyweight模式,享元模式,运用共享技术有效地支持大量细...

    极客班C++设计模式课件资料.zip

    装饰器模式则通过动态地将责任添加到对象上,而无需修改其原始类。 项目PDF手册可能包含实际应用场景的案例分析,如如何在游戏开发中应用设计模式优化代码结构,或在数据库系统中使用观察者模式实现事件驱动编程。...

Global site tag (gtag.js) - Google Analytics