用C++跟你聊聊“装饰者模式”
前方低能,大家坐好跟我说一声,我们准备发车了。
从穿衣服小游戏谈起
不知道大家有没有玩过那种游戏啊,开局给你一个不知道穿多少的人,然后你找一堆衣服给人家穿上,如果要穿的好一点那你还得花点钱啊。反正我是没玩过,我的童年游戏时光,都给了死神VS火影了。
如果现在要你来实现这么一个小游戏,你会怎么弄?很不巧的是,前面讲过的工厂模式和策略模式好像都用不了。有的人可能要说了啊,我直接一个函数,衣服套套套就完事儿了。那可不太行,需要有不同的穿搭。能穿,你还得能脱呢。
那怎么搞?小事情,今天我们聊聊“装饰者模式”。
装饰者模式
装饰者模式:动态的给一个对象添加一些额外的附加功能。拿上边那个栗子来说,给你一小姑娘/小伙子,要怎么穿是你的事儿。
如果看过了前面上一篇 - 依赖倒转原则
那我们就来看一下类图吧
上面那个栗子讲的通透了,那我们现在按着这个类图做一个手机装饰示例
代码示例
#include<iostream>
#include<string>
using namespace std;
class Phone
{
public:
Phone() {}
virtual ~Phone() {}
virtual void ShowDecorate() {}
};
//具体的手机类
class RongYao : public Phone
{
private:
string m_name; //手机名称
public:
RongYao(string name) : m_name(name) {}
~RongYao() {}
void ShowDecorate() { cout << m_name << "的装饰" << endl; }
};
//装饰主类
class DecoratorPhone : public Phone
{
private:
Phone* m_phone; //要装饰的手机
public:
DecoratorPhone(Phone* phone) : m_phone(phone) {}
virtual void ShowDecorate() { m_phone->ShowDecorate(); }
};
//具体的装饰类
class DecoratorPhoneA : public DecoratorPhone
{
public:
DecoratorPhoneA(Phone* phone) : DecoratorPhone(phone) {}
void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); }
private:
void AddDecorate() { cout << "钢化玻璃屏" << endl; } //增加的装饰
};
class DecoratorPhoneB : public DecoratorPhone
{
public:
DecoratorPhoneB(Phone* phone) : DecoratorPhone(phone) {}
void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); }
private:
void AddDecorate() { cout << "炫酷手机壳" << endl; } //增加的装饰
};
int main()
{
Phone* RongYao9 = new RongYao("HUAWEIRONGYAO");
Phone* dpa = new DecoratorPhoneA(RongYao9); //装饰,屏幕贴膜
Phone* dpb = new DecoratorPhoneB(dpa); //装饰,增加挂件
dpb->ShowDecorate();
delete dpa;
delete dpb;
delete RongYao9;
return 0;
}
- 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
装饰模式总结
上一个策略模式靠的是纯虚函数,这次,靠的是虚函数的使用。
装饰者模式是为已有实例动态的添加更多功能的一种方法。那么什么时候使用?
需要将类中的装饰部分分离出逻辑层的时候、需要给一个旧的类进行翻新的时候、对于一些特定情况下使用的特殊功能,可以使用装饰者模式套上去。
装饰者模式的一大有点就在于将类中的核心功能区与装饰层分离,这样可以简化原有的类。
不过有一点是要当心的:装饰者模式的装饰顺序是很重要的。
文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。
原文链接:lion-wu.blog.csdn.net/article/details/106093124
- 点赞
- 收藏
- 关注作者
评论(0)