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地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...
随机推荐
- C#/VB.NET与西门子PLC进行ModbusTcp通信
进入自动化行业半年多了,每天都与机器打交道. 前段时间接手一个任务,需要将我们机台与下站机台进行通讯,我们机台是PC,下站机台为西门子S7-1200. 想想完成这个任务,领导就会对我这个新人刮目相看, ...
- 大数据中HBase的Java接口封装
该文前提为已经搭建好的HBase集群环境,参见 HBase集群搭建与配置 ,本文主要是用Java编写一个Servlet接口,部署在Tomcat服务器上,用于提供http的接口供其他地方调用,接口中集成 ...
- aws存储桶s3使用
关于aws s3的使用说明: aws官方文档地址:https://docs.aws.amazon.com/s3/index.html#lang/zh_cn 创建s3与基础使用: 1.登陆aws控制台- ...
- java多线程之述解
说起线程 就不得不提进程 他们之间的关系很紧密 进程:内存中运行的应用程序 每个进程都有自己的一块内存空间 而线程是进程中的一个执行单元 一个进程中可以有多个线程 多线程的好处就是可以并发操作程序 将 ...
- 学习python,第二篇
注释 # 单行注释 ''' 多行注释 ''' 或者 """ 多行注释 """ # Author: Itxpl mag ...
- k8s环境搭建--基于minik8s方法
minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...
- 第七章 用户输入和while循环
7.1函数input()的工作原理 函数默认输入为字符串string,如果需使用数字,需用int进行类型转换 7.2 while循环 while是根据条件的真假判断是否进入执行 使用标志: 使用bre ...
- Codeforces1151E,F | 553Div2 | 瞎讲报告
传送链接 E. Number of Components 当时思博了..一直在想对于\([1,r]\)的联通块和\([1,l-1]\)的联通块推到\([l,r]\)的联通块...我真的是傻了..这题明 ...
- Scrum Meeting 10.28
今天大部分同学仍停留在学习阶段,进度快的同学已经在配置SQLserver. 成员 今日完成任务 明日计划 所用时间 徐越 配置SQLserver,试用java程序连接数据库 学习servlet,htt ...
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 1-领航
各个成员在 Alpha 阶段认领的任务 修改 序号 修改 具体描述 1 游戏过程 取消原来的跳跃和俯身按钮,保留跳跃的功能,可以触屏滑动来躲避地面障碍物,也可以躲避另一种陷阱障碍物 2 闯关功能 取消 ...