Kyle Chen's Blog

Action speaks louder than Words

0%

装饰器模式C++实现

ref: 装饰器模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include<iostream>
#include<string>
using namespace std;


class Beverage{

protected:
string description;
public:
virtual string getCost(){};
virtual string getDescription(){};
};

class MilkTea: public Beverage{
public:
string costNum;
MilkTea(){
description = "milkTea";
costNum = "¥15";
}
string getCost(){
return costNum;
}
string getDescription(){
return description;
}
};



class Decorater:public Beverage {

public:
Beverage* beverage ;
virtual string getCost(){};
virtual string getDescription(){};
Decorater(Beverage* newBeverage){
beverage = newBeverage;
}

};

class Zhenzhu:public Decorater{
public:
string costNum;
string description;
Zhenzhu(Beverage* newBeverage):Decorater(newBeverage){
costNum = "¥3";
description = " add Zhenzhu";
};
string getCost(){
return beverage->getCost()+"+"+costNum;

}
string getDescription(){
return beverage->getDescription()+description;

}


};

class Yeguo:public Decorater{
public:
string costNum;
string description;
Yeguo(Beverage* newBeverage):Decorater(newBeverage){
costNum = "¥4";
description = " add Yeguo";
};
string getCost(){
return beverage->getCost()+"+"+costNum;

}
string getDescription(){
return beverage->getDescription()+description;

}

};


int main(){

Beverage* newMilkTea = new MilkTea;
cout<<newMilkTea->getDescription()<<","<<newMilkTea->getCost()<<endl;
newMilkTea = new Zhenzhu(newMilkTea);
cout<<newMilkTea->getDescription()<<" "<<newMilkTea->getCost()<<endl;
newMilkTea = new Yeguo(newMilkTea);
cout<<newMilkTea->getDescription()<<" "<<newMilkTea->getCost()<<endl;

}