C++模式学习------代理模式
Proxy代理模式 :
为其他对象提供一种代理以控制对这个对象的访问。代理类作为桥梁是请求方和执行方的中间者,将请求方和真正的执行方分割开来,也是两者之间调用的协调者。例如执行类也就是被代理类,可以在不考虑各种特殊条件下提供所有的执行方法,请求者也可以不考虑特殊条件提出所有的请求。而在调用和被调用时需要考虑的所有条件,在代理类中完成。
1. 考虑请求方的情况:由各代理处理不同的请求
- class Service
- {
- public:
- Service();
- virtual void serviceLv0() = ;
- virtual void serviceLv1() = ;
- virtual void serviceLv2() = ;
- };
- class OfferService : public Service
- //真正的服务提供者
- {
- public:
- OfferService();
- void serviceLv0()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- void serviceLv1()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- void serviceLv2()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- };
- class ProxyOfferServiceLv0 : public Service
- //lv0 的服务提供代理
- {
- public:
- ProxyOfferServiceLv0()
- {
- m_instance = new OfferService();
- }
- void serviceLv0()
- {
- m_instance->serviceLv0();
- }
- void serviceLv1()
- {
- cout<<"No serviceLv0"<<endl;
- }
- void serviceLv2()
- {
- cout<<"No serviceLv0"<<endl;
- }
- OfferService* m_instance;
- };
- class ProxyOfferServiceLv2 : public Service
- //lv2 的服务提供代理
- {
- public:
- ProxyOfferServiceLv2()
- {
- m_instance = new OfferService();
- }
- void serviceLv0()
- {
- m_instance->serviceLv0();
- }
- void serviceLv1()
- {
- m_instance->serviceLv1();
- }
- void serviceLv2()
- {
- m_instance->serviceLv2();
- }
- OfferService* m_instance;
- };
2. 考虑执行方的情况
- enum EnumState
- {
- State_isOK,
- State_notOK
- };
- class Service
- {
- public:
- Service();
- virtual void serviceLv0() = ;
- virtual void serviceLv1() = ;
- virtual void serviceLv2() = ;
- int getServiceState()
- {
- return m_state;
- }
- int m_state; // EnumState
- };
- class OfferService : public Service
- //真正的服务提供者
- {
- public:
- OfferService();
- void serviceLv0()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- void serviceLv1()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- void serviceLv2()
- {
- cout<<"Offer serviceLv0"<<endl;
- }
- };
- class ProxyOfferServiceLv0 : public Service
- //lv0 的服务提供代理
- {
- public:
- ProxyOfferServiceLv0()
- {
- m_instance = new OfferService();
- }
- void serviceLv0()
- {
- if(m_instance->getServiceState() == State_isOK)
- //查看执行方的状态
- {
- m_instance->serviceLv0();
- }
- else
- {
- cout<<"serviceLv0 is noOK"<<endl;
- }
- }
- void serviceLv1()
- {
- cout<<"No serviceLv0"<<endl;
- }
- void serviceLv2()
- {
- cout<<"No serviceLv0"<<endl;
- }
- OfferService* m_instance;
- };
- class ProxyOfferServiceLv2 : public Service
- //lv2 的服务提供代理
- {
- public:
- ProxyOfferServiceLv2()
- {
- m_instance = new OfferService();
- }
- void serviceLv0()
- {
- if(m_instance->getServiceState() == State_isOK)
- //查看执行方的状态
- {
- m_instance->serviceLv0();
- }
- else
- {
- cout<<"serviceLv0 is noOK"<<endl;
- }
- }
- void serviceLv1()
- {
- if(m_instance->getServiceState() == State_isOK)
- //查看执行方的状态
- {
- m_instance->serviceLv1();
- }
- else
- {
- cout<<"serviceLv1 is noOK"<<endl;
- }
- }
- void serviceLv2()
- {
- if(m_instance->getServiceState() == State_isOK)
- //查看执行方的状态
- {
- m_instance->serviceLv2();
- }
- else
- {
- cout<<"serviceLv2 is noOK"<<endl;
- }
- }
- OfferService* m_instance;
- };
C++模式学习------代理模式的更多相关文章
- (@WhiteTaken)设计模式学习——代理模式
今天学习了一下代理模式,代理模式分为很多种.目前感觉有两种是需要学习一下的. 静态代理模式 动态代理模式 1. 静态代理模式 需要被代理的类,实现一个或者多个接口. 代理类需要实现被代理类的接口,在此 ...
- 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式
1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- 10.JAVA-接口、工厂模式、代理模式、详解
1.接口定义 接口属于一个特殊的类,这个类里面只能有抽象方法和全局常量 (该概念在JDK1.8之后被打破,在1.8后接口中还可以定义普通方法和静态方法,在后续章节会详讲) 1.1 接口具有以下几个原 ...
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- axios 两种异步模式,代理模式 和 异步模式
axios 两种异步模式,代理模式 和 异步模式
- 结构型模式(七) 代理模式(Proxy)
一.动机(Motivate) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦.如何在不 ...
- swift设计模式学习 - 代理模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...
随机推荐
- Django + Ansible 主机管理(有源码)
本文给大家介绍如何利用 Django + Ansible 进行 Web 项目管理. Django介绍 一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量 ...
- 自适应浏览器分辨率的javascript函数[转]
function changeWidth(now,target) { //now是现在代码所适应的宽度,如800:target是想要达到的显示器分辨率宽度var widthStr; var flag ...
- BootStap学习笔记(1)
移动设备优先: 为了让开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的head之中添加viewport meat标签:如下: <metaname="viewport& ...
- Navigation - How to define the structure of the navigation tree via the NavigationItemAttribute
In the meantime, you should use the Model Editor to create such a navigation structure. There are se ...
- 大数据中HBase集群搭建与配置
hbase是分布式列式存储数据库,前提条件是需要搭建hadoop集群,需要Zookeeper集群提供znode锁机制,hadoop集群已经搭建,参考 Hadoop集群搭建 ,该文主要介绍Zookeep ...
- requests.get()解析
1.requests.get(url, params=None, headers=None, cookies=None, auth=None, timeout=None) Sends a GET re ...
- [WPF]解决模板中ContextMenu绑定CommandParameter的问题
直接上代码,首先是一个ContextMenu的模板: <ContextMenu x:Key="Menu" BorderThickness="0.3" Fo ...
- ThreeJS实现波纹粒子效果
今天我们来用ThreeJS的库实现一个波纹粒子效果,我们用到的ThreeJS的库有CanvasRenderer.js,OrbitControls.js,Projector.js,stats.min.j ...
- NuGet 让程序集版本变得混乱
之前引用的 System.Net.Http.Formatting ,是依赖于 System.Net.Http 2.0的. 更新引用后它是依赖于 System.Net.Http 4.0 的.而且一 ...
- 凡事不求甚解,遇事必定抓瞎——PHP开发Apache服务器配置备忘录
照此配置流程,绝对一路畅通,可保无虞. 昨天弄了个PHP小程序,想在本地跑一下测试,可是工作电脑没有安装环境,于是下载了一个wamp,一路畅通,Apache.Mysql.PHP就全有了.启动wamp服 ...