设计模式之代理模式(Proxy)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。
Factory Method:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Prototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
Adapter:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言, Decorator模式比生成子类方式更为灵活。
Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。
Flyweight:运用共享技术有效地支持大量细粒度的对象。
Facade:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Template Method:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Strategy:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
State:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
Memento:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
Mediator:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
Visitor:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
Chain of Responsibility:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
Iterator:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
Interpreter:给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
Proxy:(1)、意图: 为其它对象提供一种代理以控制对这个对象的访问。
#include <string>
#include <iostream>using namespace std;//定义接口
class Interface
{
public:virtual void Request() = 0;
};//真实类
class RealClass : public Interface
{
public:virtual void Request(){cout<<"真实的请求"<<endl;}
};//代理类
class ProxyClass : public Interface
{
private:RealClass* m_realClass;
public:virtual void Request(){m_realClass = new RealClass();m_realClass->Request();delete m_realClass;}
};//客户端
int main()
{ProxyClass* test = new ProxyClass();test->Request();/*result真实的请求*/return 0;
}
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_
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();
}
main.cpp:
#include "Proxy.h"
#include <iostream>using namespace std;int main()
{Subject* sub = new ConcreteSubject();Proxy* p = new Proxy(sub);p->Request();/*resultProxy request ...ConcreteSubject ... request ...*/return 0;
}
代理模式结构图:
参考文献:
1、《大话设计模式C++》
2、《设计模式精解----GoF23种设计模式解析》
3、《设计模式----可复用面向对象软件的基础》
设计模式之代理模式(Proxy)摘录相关推荐
- 三国杀与设计模式之代理模式(Proxy)
本人原博地址:http://blog.saymagic.cn/blog.php?id=17 三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...
- 05、人人都会设计模式:代理模式--Proxy
PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/1b3b6b003032 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...
- Java设计模式之代理模式(Proxy)
参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...
- Java24种设计模式(第二种)--代理模式(Proxy Pattern)
Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...
- 二十三种设计模式(第十二种)-----代理模式(Proxy)
二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...
- 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣
代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...
- 设计模式-代理模式(Proxy Pattern)
设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...
- js设计模式——代理模式proxy
什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...
最新文章
- Google排名第一的语言,引数十万人关注:搞定它,技术大牛都甘拜下风
- 路过的朋友们,最后一天投票,感谢
- 加强IIS安全机制 建立高安全性能Web服务器
- numpy中的ogrid
- HDU2011 多项式求和
- oracle输出异常,表导出出现异常,无法继续。
- python访问web网页_python访问web的利器:urllib2
- 布谷鸟沙盒分析静态文件_“案例沙盒方法”喜提国际商学院协会(AACSB)2019年启发式创新奖...
- 同事更新几个表_无法抵挡的帅气!西铁城潮酷光动能表
- 创建单实例WPF应用程序的正确方法是什么?
- 苹果Mac备份应用推荐:Get Backup Pro
- 动态规划——状态转移方程
- 逻辑回归算法梳理(从理论到示例)
- 记一次img标签图片不拉伸处理办法
- jQuery播放音乐
- “知识共享”(CC)与开放教育资源(OER)之间的紧密关系
- 如何在javascript中发出http请求?
- 硬件基础知识(电阻)
- 联邦学习(Federated Learning)详解以及示例代码
- 【kali】安装ibus中文输入法
热门文章
- OpenCV 2.4.9-2.4.13各个版本附加依赖项Lib文件汇总
- LeetCode刷题记录8——605. Can Place Flowers(easy)
- OpenCV——膨胀与腐蚀
- android组件什么时候加载到r文件,Android自定义加载loading view动画组件
- 快速精确的体素GICP三维点云配准算法
- 【开源方案共享】ORB-SLAM3开源啦!
- CMake结合PCL库学习(2)
- C/C++面试题分享
- Revit:从入门到精通学习教程
- uboot引导kernel - 1 - Flash的分区