学以致用C++设计模式 之 “代理模式”

   日期:2020-06-04     浏览:104    评论:0    
核心提示:文章目录老板出差,找人代看店咯老板出差,找人代看店咯今天,老板出差了,临时找了个技艺精湛的师傅帮他看店。但是,老板有一个要求,一切流程,必须按照他定下来的规则走,烤面包,必须以他的方式来烤,烤肉,也必须以他的方式来,奶油怎么挤、生菜要多大等等都必须按照他的来,以确保顾客吃了之后没有啥反感。那我们来看一下这个事件中的主要因素:代工师傅、老板、老板的流程,生产出产品。将这些因素用类图的形式来表述就是如此:这是一段防爬虫文字,读者可跳过本文为CSDN作者“看,未来”原创,我的CSDN地址为h.

文章目录

    • 老板出差,找人代看店咯
    • 代码实现
    • 写时感悟
    • 代理模式的应用
      • 代理模式的优点
    • 代理模式拓展

老板出差,找人代看店咯

今天,老板出差了,临时找了个技艺精湛的师傅帮他看店。
但是,老板有一个要求,一切流程,必须按照他定下来的规则走,烤面包,必须以他的方式来烤,烤肉,也必须以他的方式来,奶油怎么挤、生菜要多大等等都必须按照他的来,以确保顾客吃了之后没有啥反感。

那我们来看一下这个事件中的主要因素:代工师傅、老板、老板的流程,生产出产品。
将这些因素用类图的形式来表述就是如此:

这是一段防爬虫文字,读者可跳过
本文为CSDN作者“看,未来”原创,我的CSDN地址为 https://lion-wu.blog.csdn.net/
本篇隶属于我的专栏 - 《设计模式 之 设计模式进阶》https://blog.csdn.net/qq_43762191/category_10059121.html
作者版权,未经允许,禁止转载。

代码实现

#include<iostream>

using namespace std;

//抽象主题
class abstractMan {
public:
	virtual void run() = 0;
};

class boss :public abstractMan {
public:
	void bread() { cout << "bread" << endl; }
	void roast() { cout << "roust" << endl; }
	
	void run() {
		//暂时不插其他模式,后面会有组合模式
		bread();
		roast();
	}
};

//代理
class proxy :public abstractMan {
public:
	proxy(abstractMan* temp) { a = temp; }
	void before(){
		//该干嘛干嘛
	}
	void after(){
		//爱干嘛干嘛
	}

	void run() { 
		before();
		a->run();
		after();
	}
private:
	abstractMan* a;
};

//场景
int main()
{
	abstractMan* bs = new boss();
	proxy* pro = new proxy(bs);
	pro->run();
}

代码是比较精简,可能比不上你们在其他地方看到的,但是我是把最精简的部分抓出来自己写的。

写时感悟

刚开始我不知道它干嘛用的,但是后面我发现,这个模式解耦合的效果特别的好,而且还保护了它的“客户信息”。
及场景类并不需要知道具体实现类的实现,甚至都不需要知道代理类的实现,场景只需要知道有个代理很流弊,这个代理有个run方法很流弊,就够了。

就像去吃东西的顾客,他们并不需要知道老板是谁,也不需要知道汉堡怎么做的,他们只需要知道跟那个师傅说一声,把钱放下,汉堡就来了。老板也不需要知道谁来吃东西,反正最后钱收一下就完了。

然后代理里面的before和after方法,就是给代理的自由权限。

代理模式的应用

一个代理类可以代理多个委托,因此代理类具体执行那个委托者的工作,由场景类把控。

代理模式的优点

  • 职责清晰
  • 高拓展性
  • 智能化

代理模式拓展

  • 普通代理
    客户端只能访问代理角色,而不能访问其他真实角色,这是比较简单的。
  • 强制代理
    这个比较奇葩一点,一般的思维都是通过代理找到真实的角色,但是强制代理确实要“强制”,你必须通过真实角色查找到代理角色,否则你不能访问。

比方说:今天老板不在,但是我就是想让老板亲自给我做,因为那个师傅做的不好吃,正巧老板娘在,于是我就跟老板娘说:“妹儿啊,你老公呢?我找他有点事儿啊”,结果老板娘说:“哎,哥啊,莫得办法呀,他这两天劳累过度啊,要不你还是让师傅给你做吧”。
你看,我本来要绕过这个师傅直接让老板来,结果兜了一圈,又兜回来了。。。
这就是强制代理。

如果有兴趣,可以自己去实现一下这个强制代理。
当然,没兴趣的话可以实现以下这个:这个师傅啊,早上当代驾,中午在汉堡店代老板做汉堡,下午去给某个十八线小明星做替身,晚上又回来做汉堡,可真够忙啊,实现一下,学以致用,马上用!!!

GoGoGoGoGo!!!

  • 动态代理
    什么是动态代理?就是在编译的时候不用知道代理谁,直到运行到的时候才选定。
    学C++不知道动态那真的是,回炉重造吧。
    一般来说,自己写的代理类就是静态的。

动态代理,阔以自己往上翻一翻,一千个读者有一千个哈姆雷特。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服