前方低能,大家坐好跟我说一声,我们准备发车了。 不知道大家有没有玩过那种游戏啊,开局给你一个不知道穿多少的人,然后你找一堆衣服给人家穿上,如果要穿的好一点那你还得花点钱啊。反正我是没玩过,我的童年游戏时光,都给了死神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; }
装饰模式总结
需要将类中的装饰部分分离出逻辑层的时候、需要给一个旧的类进行翻新的时候、对于一些特定情况下使用的特殊功能,可以使用装饰者模式套上去。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算