装饰者模式示例代码
来源:互联网 发布:票乎 大麦 编辑:程序博客网 时间:2024/05/02 09:43
// 装饰者模式.cpp : Defines the entry point for the console application.
// 参考headfirst设计模式
#include "stdafx.h"
/*
-------------
IBeverage
-------------
|
|
_________|________________________________________
| | |
------------- ------------- |
Esoresso DarkRoast -----------------------
------------- ------------- ICondimentDecorator
-----------------------
|
|
__________|_______________
| |
------------- -------------
Mocha Whip
------------- -------------
*/
//接口Beverage
//装饰者和被装饰者的共同基类
struct IBeverage
{
public:
virtual double Cost() = 0;
virtual void Desc() = 0;
};
//装饰者类基类
class ICondimentDecorator : public IBeverage
{
};
//具体被装饰者,这是一种饮料
class Esoresso : public IBeverage
{
public:
double Cost()
{
return 1.99;
}
void Desc()
{
printf(" Esoresso ");
}
};
//具体被装饰者,这是另一种饮料
class DarkRoast : public IBeverage
{
public:
double Cost()
{
return 2.99;
}
void Desc()
{
printf(" DarkRoast ");
}
};
//具体装饰者,这是一种调料
class Mocha : public ICondimentDecorator
{
IBeverage* m_pBeverage;
public:
Mocha(IBeverage* pBeverage)
{
m_pBeverage = pBeverage;
}
double Cost()
{
return 0.20 + m_pBeverage->Cost();
}
void Desc()
{
m_pBeverage->Desc();
printf(" Mocha ");
}
};
//具体装饰者,这是另一种调料
class Whip : public ICondimentDecorator
{
IBeverage* m_pBeverage;
public:
Whip(IBeverage* pBeverage)
{
m_pBeverage = pBeverage;
}
double Cost()
{
return 0.10 + m_pBeverage->Cost();
}
void Desc()
{
m_pBeverage->Desc();
printf(" Whip ");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//客户代码
IBeverage* pBeverage = new DarkRoast(); //来杯饮料
pBeverage = new Mocha(pBeverage); //加点Mocha
pBeverage = new Whip(pBeverage); //加点Whip
//看看我们的饮料及价格
pBeverage->Desc();
printf("/n----------------/nCost: %lf RMB/n/n", pBeverage->Cost());
pBeverage = new Esoresso(); //再来杯饮料
pBeverage = new Mocha(pBeverage); //加点Mocha
pBeverage = new Mocha(pBeverage); //再加点Mocha
pBeverage = new Whip(pBeverage); //加点Whip
//再来看看我们的饮料及价格
pBeverage->Desc();
printf("/n----------------/nCost: %lf RMB/n/n", pBeverage->Cost());
return 0;
}
// 参考headfirst设计模式
#include "stdafx.h"
/*
-------------
IBeverage
-------------
|
|
_________|________________________________________
| | |
------------- ------------- |
Esoresso DarkRoast -----------------------
------------- ------------- ICondimentDecorator
-----------------------
|
|
__________|_______________
| |
------------- -------------
Mocha Whip
------------- -------------
*/
//接口Beverage
//装饰者和被装饰者的共同基类
struct IBeverage
{
public:
virtual double Cost() = 0;
virtual void Desc() = 0;
};
//装饰者类基类
class ICondimentDecorator : public IBeverage
{
};
//具体被装饰者,这是一种饮料
class Esoresso : public IBeverage
{
public:
double Cost()
{
return 1.99;
}
void Desc()
{
printf(" Esoresso ");
}
};
//具体被装饰者,这是另一种饮料
class DarkRoast : public IBeverage
{
public:
double Cost()
{
return 2.99;
}
void Desc()
{
printf(" DarkRoast ");
}
};
//具体装饰者,这是一种调料
class Mocha : public ICondimentDecorator
{
IBeverage* m_pBeverage;
public:
Mocha(IBeverage* pBeverage)
{
m_pBeverage = pBeverage;
}
double Cost()
{
return 0.20 + m_pBeverage->Cost();
}
void Desc()
{
m_pBeverage->Desc();
printf(" Mocha ");
}
};
//具体装饰者,这是另一种调料
class Whip : public ICondimentDecorator
{
IBeverage* m_pBeverage;
public:
Whip(IBeverage* pBeverage)
{
m_pBeverage = pBeverage;
}
double Cost()
{
return 0.10 + m_pBeverage->Cost();
}
void Desc()
{
m_pBeverage->Desc();
printf(" Whip ");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//客户代码
IBeverage* pBeverage = new DarkRoast(); //来杯饮料
pBeverage = new Mocha(pBeverage); //加点Mocha
pBeverage = new Whip(pBeverage); //加点Whip
//看看我们的饮料及价格
pBeverage->Desc();
printf("/n----------------/nCost: %lf RMB/n/n", pBeverage->Cost());
pBeverage = new Esoresso(); //再来杯饮料
pBeverage = new Mocha(pBeverage); //加点Mocha
pBeverage = new Mocha(pBeverage); //再加点Mocha
pBeverage = new Whip(pBeverage); //加点Whip
//再来看看我们的饮料及价格
pBeverage->Desc();
printf("/n----------------/nCost: %lf RMB/n/n", pBeverage->Cost());
return 0;
}
- 装饰者模式示例代码
- 装饰者模式 java代码小示例
- 结构型模式——装饰器模式 示例代码
- 设计模式示例二 Decorator(装饰者)
- JAVA装饰者模式简单示例
- SiteMesh使用示例 -装饰模式
- C#装饰者模式实例代码
- 装饰者模式及C++代码实现
- 装饰者设计模式,简单代码实现
- 装饰者模式(Decorator)的c++实现示例
- 装饰者模式(Decorator)的c++实现示例
- 设计模式-装饰模式Decorator JAVA示例
- 手抄代码之装饰模式
- 装饰模式c++代码实现
- Decorator装饰器模式Java示例学习
- Decorator装饰器模式Java示例学习
- Mars老师讲解的装饰者模式代码例子
- 装饰者模式-有层次地组织代码
- 内联函数 Inline Function
- 为了我的目标,我将付出一生去追求
- Struts2零配置中的config-browser插件的使用问题
- 联想Y450 Win7下玩全屏游戏弹回桌面的解决办法
- 50个好网站
- 装饰者模式示例代码
- 在对话框上添加视图
- oracle的基本知识
- 误删资料恢复
- DBLP数据解析
- 动态添加属性 C#
- curl with ssl support 编译
- js 实现键盘记录 兼容FireFox和IE
- 今天听到一个SAP的模块,BPS