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地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...
随机推荐
- Python 10min系列之面试题解析丨Python实现tail -f功能
关于这道题,简单说一下我的想法吧.当然,也有很好用的 pyinotify 模块专门监听文件变化,不过我更想介绍的,是解决的思路. 毕竟作为面试官,还是想看到一下解决问题的思路,而且我觉得这一题的难点不 ...
- How to access business objects with their related ObjectSpaces (Multi-Database Environment)
https://www.devexpress.com/Support/Center/Question/Details/T565897/how-to-access-business-objects-wi ...
- [转载]在Windows下为PHP5.6安装redis扩展和memcached扩展
一.php安装redis扩展 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本 2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...
- 大神教你零基础学PS,30堂课从入门到精通
ps视频教程,ps自学视频教程.ps免费视频教程下载,大神教你零基础学PS教程视频内容较大,分为俩部分: 大神教你零基础学PS--30堂课从入门到精通第一部分:百度网盘,https://pan.bai ...
- Linux学习之常用命令(二)
1.上次介绍了一些常用的系统命令,这次又总结了一些小命令,故分享一下: 网卡地址查询的命令: ifconfig #不同于Windows系统,它的是ifconfig而不是ipconfig ip -a # ...
- jenkins 多任务串行执行
摘要 今天在新创建自动化部署项目的时候遇到了一个问题:我们的项目是maven聚合的所以在构建maven项目的时候要从parent开始build,但是这样会造成一个问题,我每次添加此parent项目下的 ...
- C/S结构与B/S结构
按照是否需要访问网络,程序可分为网络程序与非网络程序.其中网络程序又可分为B/S结构与C/S结构. C/S结构是指客户端(Client)/服务器(Server)模式,这种模式的客户端中 需要安装一个R ...
- 帝国cms后台集成ueditor编辑器
我更换成百度编辑器的原因有以下几点:1.使用百度编辑器的图片粘贴上传功能,这个功能实在是太有必要了,有开发的过程中或上传的过程中,通常用qq直接截图,直接放到文章上面,避免了再放到本地保存的情况,真是 ...
- 【坚持】Selenium+Python学习之从读懂代码开始 DAY6
2018/05/23 Python内置的@property装饰器 [@property](https://www.programiz.com/python-programming/property) ...
- Windows下 搭建redis集群
Windows下搭建redis集群教程 一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主 ...