设计模式学习-Decorator装饰者模式
2014-04-04 13:57
190 查看
装饰模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
Beverage 饮料
Espresso 浓咖啡
CondimentDecorator 配料,继承于Beverage类
Mocha 摩卡
Whip 奶泡
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//饮料
class Beverage
{
public:
Beverage()
{
}
virtual string getdescription() = 0;
virtual double cost() = 0;
string name;
};
class Espresso : public Beverage
{
public:
Espresso()
{
name = "Espresso";
}
double cost()
{
return 2.0;
}
string getdescription()
{
return name;
}
};
//配料
class CondimentDecorator : public Beverage
{
public:
Beverage* beverage;
};
//摩卡
class Mocha : public CondimentDecorator
{
public:
Mocha(Beverage* _beverage)
{
beverage = _beverage;
name = "Mocha";
}
double cost()
{
return beverage->cost() + 1.5;
}
string getdescription()
{
return beverage->getdescription() + "," + name;
}
};
//奶泡
class Whip : public CondimentDecorator
{
public:
Whip(Beverage* _beverage)
{
beverage = _beverage;
name = "Whip";
}
double cost()
{
return beverage->cost() + 0.9;
}
string getdescription()
{
return beverage->getdescription() + "," + name;
}
};
int main()
{
cout << "原味咖啡" << endl;
Beverage* p1 = new Espresso();
cout << p1->getdescription() << endl;
cout << "价格: " << p1->cost() <<endl;
Beverage* p2 = new Mocha(p1);
cout << p2->getdescription() << endl;
cout << "价格: " << p2->cost() <<endl;
Beverage* p3 = new Whip(p2);
cout << p3->getdescription() << endl;
cout << "价格: " << p3->cost() <<endl;
delete p3;
delete p2;
delete p1;
getchar();
return 0;
}将调料作为装饰类,可根据需要对饮料添加相应的调料。
Beverage 饮料
Espresso 浓咖啡
CondimentDecorator 配料,继承于Beverage类
Mocha 摩卡
Whip 奶泡
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//饮料
class Beverage
{
public:
Beverage()
{
}
virtual string getdescription() = 0;
virtual double cost() = 0;
string name;
};
class Espresso : public Beverage
{
public:
Espresso()
{
name = "Espresso";
}
double cost()
{
return 2.0;
}
string getdescription()
{
return name;
}
};
//配料
class CondimentDecorator : public Beverage
{
public:
Beverage* beverage;
};
//摩卡
class Mocha : public CondimentDecorator
{
public:
Mocha(Beverage* _beverage)
{
beverage = _beverage;
name = "Mocha";
}
double cost()
{
return beverage->cost() + 1.5;
}
string getdescription()
{
return beverage->getdescription() + "," + name;
}
};
//奶泡
class Whip : public CondimentDecorator
{
public:
Whip(Beverage* _beverage)
{
beverage = _beverage;
name = "Whip";
}
double cost()
{
return beverage->cost() + 0.9;
}
string getdescription()
{
return beverage->getdescription() + "," + name;
}
};
int main()
{
cout << "原味咖啡" << endl;
Beverage* p1 = new Espresso();
cout << p1->getdescription() << endl;
cout << "价格: " << p1->cost() <<endl;
Beverage* p2 = new Mocha(p1);
cout << p2->getdescription() << endl;
cout << "价格: " << p2->cost() <<endl;
Beverage* p3 = new Whip(p2);
cout << p3->getdescription() << endl;
cout << "价格: " << p3->cost() <<endl;
delete p3;
delete p2;
delete p1;
getchar();
return 0;
}将调料作为装饰类,可根据需要对饮料添加相应的调料。
相关文章推荐
- 设计模式学习笔记---设计原则
- 设计模式学习-为什么要采用设计模式
- 设计模式学习笔记-备忘录模式
- 设计模式学习--------6.单例模式学习
- 设计模式学习005——命令模式
- 设计模式学习之路——Builder
- 设计模式学习的几点建议
- 6、学习集合——迭代器设计模式
- 【学习】JavaScript设计模式——认识设计模式
- 设计模式学习笔记(十七)——Command命令模式
- 设计模式学习笔记
- 设计模式学习笔记(三):代理模式
- java设计模式-观察者模式学习
- 设计模式学习(六)结构型模式初步了解
- 学习javascript设计模式之装饰者模式
- 设计模式学习-----访问者模式
- 设计模式学习
- 设计模式学习笔记一——开篇
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记
- 跟着实例学习设计模式(3)-工厂方法(创建型)