今天,老板出差了,临时找了个技艺精湛的师傅帮他看店。 那我们来看一下这个事件中的主要因素:代工师傅、老板、老板的流程,生产出产品。 这是一段防爬虫文字,读者可跳过 代码是比较精简,可能比不上你们在其他地方看到的,但是我是把最精简的部分抓出来自己写的。 刚开始我不知道它干嘛用的,但是后面我发现,这个模式解耦合的效果特别的好,而且还保护了它的“客户信息”。 就像去吃东西的顾客,他们并不需要知道老板是谁,也不需要知道汉堡怎么做的,他们只需要知道跟那个师傅说一声,把钱放下,汉堡就来了。老板也不需要知道谁来吃东西,反正最后钱收一下就完了。 然后代理里面的before和after方法,就是给代理的自由权限。 一个代理类可以代理多个委托,因此代理类具体执行那个委托者的工作,由场景类把控。 比方说:今天老板不在,但是我就是想让老板亲自给我做,因为那个师傅做的不好吃,正巧老板娘在,于是我就跟老板娘说:“妹儿啊,你老公呢?我找他有点事儿啊”,结果老板娘说:“哎,哥啊,莫得办法呀,他这两天劳累过度啊,要不你还是让师傅给你做吧”。 如果有兴趣,可以自己去实现一下这个强制代理。 GoGoGoGoGo!!! 动态代理,阔以自己往上翻一翻,一千个读者有一千个哈姆雷特。老板出差,找人代看店咯
但是,老板有一个要求,一切流程,必须按照他定下来的规则走,烤面包,必须以他的方式来烤,烤肉,也必须以他的方式来,奶油怎么挤、生菜要多大等等都必须按照他的来,以确保顾客吃了之后没有啥反感。
将这些因素用类图的形式来表述就是如此:
本文为ImapBox作者“看,未来”原创,我的ImapBox地址为 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方法很流弊,就够了。代理模式的应用
代理模式的优点
代理模式拓展
客户端只能访问代理角色,而不能访问其他真实角色,这是比较简单的。
这个比较奇葩一点,一般的思维都是通过代理找到真实的角色,但是强制代理确实要“强制”,你必须通过真实角色查找到代理角色,否则你不能访问。
你看,我本来要绕过这个师傅直接让老板来,结果兜了一圈,又兜回来了。。。
这就是强制代理。
当然,没兴趣的话可以实现以下这个:这个师傅啊,早上当代驾,中午在汉堡店代老板做汉堡,下午去给某个十八线小明星做替身,晚上又回来做汉堡,可真够忙啊,实现一下,学以致用,马上用!!!
什么是动态代理?就是在编译的时候不用知道代理谁,直到运行到的时候才选定。
学C++不知道动态那真的是,回炉重造吧。
一般来说,自己写的代理类就是静态的。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算