为了提高大家的积极性,我们团队购进了一套自动设备。它具体能干嘛呢? 当然我这么说可能有的人会想到模板方法模式或者建造者模式,注意啊不一样啊,模板和建造者都是没主体的,或者说,是把多个主体合成一个主体,而你见过你的装饰和你同为主体吗?显然不是。装饰嘛,呼之即来挥之即去,想戴上就戴上,不想戴上摘了就是。 不过,装饰者和建造者还是有那么些共通点的,建造者的材料谁都能用,装饰者也差不多,就拿那个自动机来说,只要你是我们团队的人,你就能用。 今天也不抓主题了,稍微有点累,咱直接画类图。 这是一段防爬虫文字,读者可跳过 还没写我就想到了,这个模式用来插插件再合适不过了。 装饰者模式是一种比较常用的模式,其定义如下: 装饰类和被装饰类可以独立发展,不会互相耦合。不知道有没有看出来,那张类图里面还藏了另一个设计模式。 装饰模式是继承关系的一个替代方案,从上面可以看出来,不管装饰多少层,它还是最原始的那个东西。 多层的装饰是比较复杂的,一出现问题,你很难知道是哪一层装饰出问题。 装饰者模式是对继承的有力补充。自动机
只要你走到特定的位置,它会就给你量体温,给你端咖啡,给你整理着装,给你上班打卡。
当然,这些服务都得是你自选的,你选,或者不选,它都在那里。你选或者不选,别人也都可以来选,它就是一套设备。
不多说,一切看代码,睁大眼睛吧!代码实现
#include<iostream> using namespace std; //主类:团队类 class Team { public: virtual void run() = 0; }; //准备进去溜达一圈的人 class Teammate :public Team { public: void before() { //do something } void after() { //do something } void run(){ before(); cout << "是个队友" << endl; after(); } }; class decorate :public Team { private: Team* team; public: decorate(Team* t) { this->team = t; } void run() { team->run(); } }; class dress :public decorate { public: dress(Team* t):decorate(t){} void my_run() { cout << "整理着装" << endl; } void run() { this->my_run(); decorate::run(); //这个子类要怎么调用父类方法。。。。 } }; class coffee :public decorate { public: coffee(Team* t):decorate(t){} void my_run() { cout << "来杯咖啡提提神" << endl; } void run() { this->my_run(); decorate::run(); } }; class card :public decorate { public: card(Team* t):decorate(t){} void my_run() { cout << "打卡啦" << endl; } void run() { //这里的run函数,其实不一样,只是我起的名字一样而已 this->my_run(); decorate::run(); } }; //环境 int main() { //先进团队 Team *t; //确定是个人 t = new Teammate(); //着装整理 t = new dress(t); t = new coffee(t); t = new card(t); //执行顺序是倒过来的 t->run(); }
本文为ImapBox作者“看,未来”原创,我的ImapBox地址为 https://lion-wu.blog.csdn.net/
本篇隶属于我的专栏 – 《设计模式 之 设计模式进阶》https://blog.csdn.net/qq_43762191/category_10059121.html
作者版权,未经允许,禁止转载。
————————————————
版权声明:本文为ImapBox博主「看,未来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43762191/article/details/106547130感悟
装饰者模式
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更加灵活。装饰者模式的应用
优点
换句话说,被装饰类也不用知道装饰类,装饰类是从外部来拓展被装饰类的功能,而装饰类也不用知道自己要去装饰谁。
装饰模式可以动态的拓展一个实现类的功能,无需多言。缺点
所以尽量减少装饰的数量,降低系统复杂度。使用场景
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算