文章目录
- 前言
- 一、装饰器模式
- 二、外观模式
- 三、适配器模式
- 总结
前言
装饰器模式、外观模式、适配器模式举例
一、装饰器模式
例子:手机类,可以有多个,这里举例小米手机
初始化只有小米裸机,使用装饰器进行贴膜操作,加皮套操作。
复制代码
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
56class Phone{ public: virtual void show() = 0; }; class MiPhone :public Phone{ public: virtual void show(){ cout << "小米手机" << endl; } }; class Decorator :public Phone{ public: Decorator(Phone* p) :phone(p){} virtual void show() = 0; protected: Phone* phone; }; class moDecorator :public Decorator{ public: moDecorator(Phone* p) :Decorator(p){} void show(){ phone->show(); mo(); } void mo(){ cout << "贴膜" << endl; } }; class taoDecorator :public Decorator{ public: taoDecorator(Phone* p) :Decorator(p){} void show(){ phone->show(); tao(); } void tao(){ cout << "带皮套" << endl; } }; int main() { Phone* p = new MiPhone; p->show(); cout << "-------" << endl; Phone* moPhone = new moDecorator(p); moPhone->show(); cout << "---------" << endl; Phone* taoPhone = new taoDecorator(p); taoPhone->show(); cout << "---------" << endl; Phone* moAndTaoPhone = new moDecorator(taoPhone); moAndTaoPhone->show(); return 0; }
二、外观模式
例子:有dvd,灯,游戏盒子
游戏模式:dvd打开,灯关闭,游戏盒子打开
其他模式:dvd关闭,灯打开,游戏盒子打开
复制代码
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
38class DVD{ public: void on(){ cout << "dvd打开了" << endl; } void off(){ cout << "dvd关闭了" << endl; } }; class Light{ public: void on(){ cout << "Light打开了" << endl; } void off(){ cout << "Light关闭了" << endl; } }; class XBox{ public: void on(){ cout << "XBox打开了" << endl; } void off(){ cout << "XBox关闭了" << endl; } }; class Mode{ public: void GameMode(){ dvd->on(); light->off(); xBox->on(); } void otherMode(){ dvd->off(); light->on(); xBox->on(); } private: DVD* dvd; Light* light; XBox* xBox; }; int main() { Mode* m = new Mode; m->GameMode(); cout << " ----" << endl; m->otherMode(); return 0; }
三、适配器模式
例子:对手机充电使用5V,但现在只有220V,使用适配器使其兼容。
复制代码
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
40class V5{ public: virtual void useV5() = 0; }; class V220{ public: void useV220(){ cout << "使用220V充电" << endl; } }; class Adapter:public V5{ public: Adapter(V220* v):v220(v){} void useV5(){ v220->useV220(); } private: V220* v220; }; class Phone{ public: Phone(V5* v):v5(v){} void charge(){ cout << "phone充电" << endl; v5->useV5(); } private: V5* v5; }; int main() { V5* v5 = new Adapter(new V220); Phone* p = new Phone(v5); p->charge(); return 0; }
总结
个人理解:
- 装饰器模式对类装饰,修改属性,比如可以对小米裸机贴膜或者取膜。
- 外观模式将多个不同类的功能结合在一起。
- 适配器模式将不对应的类通过适配器类使其兼容。
最后
以上就是含糊西装最近收集整理的关于设计模式:装饰器模式、外观模式、适配器模式前言一、装饰器模式二、外观模式三、适配器模式总结的全部内容,更多相关设计模式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复