前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学以致用C++设计模式 之 “代理模式”

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

作者头像
看、未来
发布2020-08-26 11:16:12
7230
发布2020-08-26 11:16:12
举报

老板出差,找人代看店咯

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

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

在这里插入图片描述
在这里插入图片描述

代码实现

代码语言:javascript
复制
#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++不知道动态那真的是,回炉重造吧。 一般来说,自己写的代理类就是静态的。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 老板出差,找人代看店咯
  • 代码实现
  • 写时感悟
  • 代理模式的应用
    • 代理模式的优点
    • 代理模式拓展
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档