委托设计模式(即代理模式)
来源:互联网 发布:seo工程师考证 编辑:程序博客网 时间:2024/04/30 11:31
问题
至少在以下集中情况下可以用 Proxy 模式解决问题:
1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成, GoF 称之为虚代理(Virtual Proxy);
2)为网络上的对象创建一个局部的本地代理, 比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成, GoF 称之为远程代理(Remote Proxy);
3) 对对象进行控制访问的时候, 比如在 Jive 论坛中不同权限的用户(如管理员、 普通用户等) 将获得不同层次的操作权限, 我们将这个工作交给一个代理去完成, GoF 称之为保护代理(Protection Proxy)。
4) 智能指针(Smart Pointer), 关于这个方面的内容, 建议参看 Andrew Koenig 的《C++沉思录》中的第 5 章。
模式选择
Proxy 模式典型的结构图为:
图 2-1: Proxy Pattern 结构图
实际上, Proxy 模式的想法非常简单,
实现
完整代码示例(code)
Proxy 模式的实现很简单, 这里为了方便初学者的学习和参考, 将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)。
代码片断 1: Proxy.h
//Proxy.h#ifndef _PROXY_H_#define _PROXY_H_class Subject{public: virtual ~Subject(); virtual void Request() = 0;protected: Subject();private:};class ConcreteSubject:public Subject{public: ConcreteSubject(); ~ConcreteSubject(); void Request();protected:private:};class Proxy{public: Proxy(); Proxy(Subject* sub); ~Proxy(); void Request();protected:private: Subject* _sub;};#endif //~_PROXY_H_
代码片断 2: Proxy.cpp
//Proxy.cpp#include "Proxy.h"#include <iostream>using namespace std;Subject::Subject(){}Subject::~Subject(){}ConcreteSubject::ConcreteSubject(){}ConcreteSubject::~ConcreteSubject(){}void ConcreteSubject::Request(){ cout<<"ConcreteSubject......request...."<<endl;}Proxy::Proxy(){}Proxy::Proxy(Subject* sub){ _sub = sub;}Proxy::~Proxy(){ delete _sub;}void Proxy::Request(){ cout<<"Proxy request...."<<endl; _sub->Request();}
代码片断 3: main.cpp
//main.cpp#include "Proxy.h"#include <iostream>using namespace std;int main(int argc,char* argv[]){ Subject* sub = new ConcreteSubject(); Proxy* p = new Proxy(sub); p->Request(); return 0;}
代码说明
Proxy 模式的实现很简单,这里不做多余解释。
可以看到,示例代码运行后, p 的 Request 请求实际上是交给了 sub 来实际执行。
讨论
Proxy 模式最大的好处就是实现了逻辑和实现的彻底解耦。
阅读全文
0 0
- 委托设计模式(即代理模式)
- 委托(代理) 设计模式
- 委托代理设计模式(协议)
- 设计模式之委托代理(delegate)
- OC设计模式之代理(委托)设计模式
- delegate代理(委托)设计模式
- 浅谈代理/委托设计模式
- Swift 委托/代理设计模式
- iOS 代理委托设计模式
- 代理模式(委托模式)
- 在C#中使用代理(即委托)的方式触发事件(观察者模式)
- Objective-C中的协议和代理(委托)设计模式
- 六 设计模式之代理模式(或称委托模式)
- 【Swift】 委托代理设计模式- 寻人启事
- iOS 委托代理delegate设计模式
- iOS 委托代理delegate设计模式
- iOS 中的设计模式--委托代理
- 【编程素质】设计模式-代理模式(委托模式、Proxy Pattern)
- 抽奖规则分享
- php判断设备和微信
- 也想用git?命令太多眼花缭乱?四步带您快速上手开启装B之旅
- ubuntu16.04apt-get错误解决
- spring <bean>的自动装配
- 委托设计模式(即代理模式)
- Java 日期工具类
- maven下多环境配置文件、属性管理 & Spring使用@value初始化字段值
- Https总结
- 电气工程师能做电工么
- HTTP请求方法
- Json的基础到传值
- MYSQL修改编码
- always语句块中非阻塞语句中赋值冲突举例分析