Proxy(代理)-对象结构型模式
1.意图
为其它对象提供一种代理以控制对这个对象的访问。
2.别名
Surrogate.
3.动机
通过Proxy可以达到对一个对象的访问控制。
4.适用性
- 远程代理 为一个对象在不同地址空间提供局部代表。
- 虚代理 根据需要创建开销很大的对象。
- 保护代理 控制对原始对象的访问。
- 智能指引 取代了指针,它在访问对象时执行一些附加操作。
5.结构
6.代码实例
//Subject.h #include <memory> class Subject
{
public:
virtual void Request() = ;
}; class RealSubject : public Subject
{
public:
void Request();
}; class Proxy : public Subject
{
public:
Proxy();
void Request();
private:
std::shared_ptr<Subject> m_pSubject;
};
//Subject.cpp #include <iostream>
#include "Subject.h" void RealSubject::Request()
{
std::cout<<"RealSubject Request Exectued" << std::endl;
} Proxy::Proxy()
{
m_pSubject = std::shared_ptr<Subject>(new RealSubject);
} void Proxy::Request()
{
m_pSubject->Request();
}
//Client.cpp #include "Subject.h" int main()
{
std::shared_ptr<Subject> pProxy(new Proxy);
pProxy->Request(); while();
}
7.测试结果
8.效果
- 远程代理 可以隐藏一个对象存在于不同地址空间的事实。
- 虚代理 可以进行最优化,例如根据要求创建对象。
- 保护代理和智能引用 都允许在访问一个对象时有一些附加的内务处理。
Proxy(代理)-对象结构型模式的更多相关文章
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- Bridge模式——对象结构型模式
今天看了Bridge模式,对其进行简单的总结,并给出几篇通俗易懂的文章链接. (一)意图--将抽象部分和它的实现部分分离,使它们都可以独立地变化. 适用于从多维度描述的类型,拆解开来,使其能沿着各维度 ...
- Facade(外观)-对象结构型模式
1.意图 为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2.动机 将一个系统划分成若干子系统有利于降低系统的复杂性.一个常见的设计目 ...
- Decorator(装饰)-对象结构型模式
1.意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 2.别名 包装器 Wrapper. 3.动机 给某个对象而不是整个类添加一些功能.一个较为灵 ...
- Bridge(桥接)-对象结构型模式
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 2.动机 在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化. 3.适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系. ...
- Adapter(适配器)-类对象结构型模式
1.意图 将一个类接口转换成客户希望的另外一个接口.Adapter模式使那些原本不能一起工作的类,可以一起工作. 2.别名 包装器 Wrapper. 3.动机 一个应用可能会有一些类具有不同的接口,并 ...
- Flyweight(享元)--对象结构型模式
1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...
- Composite(组合)--对象结构型模式
1.意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成 ...
- C#设计模式之十三代理模式(Proxy)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字 ...
随机推荐
- Hibernate之即时更新
昨天工作中遇到了一个简单的问题,弄了好久,都怪自己没有好好的去了解hibernate,导致了这样的问题弄了两三个小时. 问题是这样的:我想即时更改数据,然后再查询 (1)用Spring的getHibe ...
- 编译WebRTC遇到的问题总结
唉,本人下载WebRTC的代码都用了几天,真的是惭愧,本来以为很简单的东西,没想到搞了这么久,在下载的过程中,心里骂了无数遍XXX,这鬼东西咋这么难搞.后来终于搞明白了为啥代码总是下载不了,然后又在心 ...
- MSSQL PIVOT 实现行列转置
create table #temp ( ProdStep varchar(40), ModuleStatus varchar(40), Cnt int ); insert into #temp va ...
- 关于处理小数点位数的几个oracle函数
1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select trunc(1.2345, 2) from ...
- x-ua-compatible的实践
前提: 在ie8中测试 页面头部含有<!DOCTYPE html> 结果: <meta http-equiv="x-ua-compatible" content= ...
- SpringBoot的基础Pom
原文连接 http://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ 名称 说明 spring-boot-starter 核心 POM,包含 ...
- DIV+CSS:Margin和Padding属性[转载]
margin和padding用来隔开元素,margin是隔开元素与外边,padding是隔开元素里边. margin: 包括margin-top.margin-right.margin-bottom. ...
- java学习第20天(IO流)
构造方法File file = new File("e:\\demo"); 创建文件夹 File file = new File("e:\\demo"); fi ...
- Flume整合Spark Streaming
Spark版本1.5.2,Flume版本:1.6 Flume agent配置文件:spool-8.51.conf agent.sources = source1 agent.channels = me ...
- 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载
要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...