博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++模式学习------代理模式
阅读量:7089 次
发布时间:2019-06-28

本文共 2340 字,大约阅读时间需要 7 分钟。

Proxy代理模式 :

为其他对象提供一种代理以控制对这个对象的访问。代理类作为桥梁是请求方和执行方的中间者,将请求方和真正的执行方分割开来,也是两者之间调用的协调者。例如执行类也就是被代理类,可以在不考虑各种特殊条件下提供所有的执行方法,请求者也可以不考虑特殊条件提出所有的请求。而在调用和被调用时需要考虑的所有条件,在代理类中完成。

 

1. 考虑请求方的情况:由各代理处理不同的请求

1 class Service 2 { 3 public: 4     Service(); 5  6     virtual void serviceLv0() = 0; 7     virtual void serviceLv1() = 0; 8     virtual void serviceLv2() = 0; 9 };10 11 class OfferService : public Service12         //真正的服务提供者13 {14 public:15     OfferService();16 17     void serviceLv0()18     {19         cout<<"Offer serviceLv0"<
serviceLv0();43 }44 void serviceLv1()45 {46 cout<<"No serviceLv0"<
serviceLv0();68 }69 void serviceLv1()70 {71 m_instance->serviceLv1();72 }73 void serviceLv2()74 {75 m_instance->serviceLv2();76 }77 78 OfferService* m_instance;79 };

 

2. 考虑执行方的情况

1 enum EnumState  2 {  3     State_isOK,  4     State_notOK  5 };  6   7 class Service  8 {  9 public: 10     Service(); 11  12     virtual void serviceLv0() = 0; 13     virtual void serviceLv1() = 0; 14     virtual void serviceLv2() = 0; 15  16     int getServiceState() 17     { 18         return m_state; 19     } 20  21     int m_state; // EnumState 22 }; 23  24 class OfferService : public Service 25         //真正的服务提供者 26 { 27 public: 28     OfferService(); 29  30     void serviceLv0() 31     { 32         cout<<"Offer serviceLv0"<
getServiceState() == State_isOK) 56 //查看执行方的状态 57 { 58 m_instance->serviceLv0(); 59 } 60 else 61 { 62 cout<<"serviceLv0 is noOK"<
getServiceState() == State_isOK) 89 //查看执行方的状态 90 { 91 m_instance->serviceLv0(); 92 } 93 else 94 { 95 cout<<"serviceLv0 is noOK"<
getServiceState() == State_isOK)101 //查看执行方的状态102 {103 m_instance->serviceLv1();104 }105 else106 {107 cout<<"serviceLv1 is noOK"<
getServiceState() == State_isOK)113 //查看执行方的状态114 {115 m_instance->serviceLv2();116 }117 else118 {119 cout<<"serviceLv2 is noOK"<

 

转载于:https://www.cnblogs.com/tyche116/p/8671232.html

你可能感兴趣的文章
spring boot集成swagger2
查看>>
写代码的三重境界
查看>>
hibernate中懒加载和急加载的区别,以及hibernate中get()方法和load()方法的区别
查看>>
最适合程序员编程的10款字体
查看>>
Hierarchyviewer定位Android图片资源的研究
查看>>
sqlserver关于时间的一些语句
查看>>
失效的URL访问限制(转)
查看>>
转:你应当如何学习C++(以及编程)(rev#1)
查看>>
加密解密算法与通讯安全(五)
查看>>
说说Java代理模式
查看>>
【原】centos系统命令部分不可用
查看>>
servlet 上传文件 参数中文乱码
查看>>
获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS”
查看>>
[STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD。。。
查看>>
POJ2349 Arctic Network(Prim)
查看>>
wp7、8丿____IValueConverter_(含参,值转换器)
查看>>
HBase 超详细介绍
查看>>
iOS 中二维码扫描
查看>>
scrapy回调函数传递参数
查看>>
SGU 499 Greatest Greatest Common Divisor
查看>>