html网站要怎么做的,易语言怎么做网站自动登录,龙岩市住房与城乡建设局网站,贵阳网站建设有限公司Proxy 代理模式也是属于“接口隔离”模式#xff0c;通过增加一层间接层来解决问题的模式。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构( Structure )4. 代码演示Proxy 代理模式4.1 常规方法4.2 Proxy 代理模式 5. 要点总结6. 其他参考 1. 动机( Motivation) 在面向对…Proxy 代理模式也是属于“接口隔离”模式通过增加一层间接层来解决问题的模式。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构( Structure )4. 代码演示Proxy 代理模式4.1 常规方法4.2 Proxy 代理模式 5. 要点总结6. 其他参考 1. 动机( Motivation) 在面向对象系统中有些对象由于某种原因 (比如对象创建的开销很大或者某些操作需要安全控制或者需要进程外的访问等)直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。 所谓透明操作就是一致性假如本来访问这个对象的方式是new一个对象调用对象接口那我还用类似方式访问你至于背后的麻烦事都不用知道实现隔离。
2. 模式定义
为其他对象提供一种代理以控制(隔离使用接口) 对这个对象的访问。 —《设计模式》GoF
3. 结构( Structure ) 上图是《设计模式》GoF中定义的Proxy 代理模式的设计结构。结合上面的代码看图中最重要的是看其中稳定和变化部分也就是下图中红框和蓝框框选的部分。
模式的结构很简单但在实际使用过程中可能会变得非常复杂。上图中接口为Subject实际的对象为RealSubject本来进行访问时Client应该是直接声明一个Subject的接口真正实际创建的是一个RealSubject的对象但是由于某种特殊的原因这时Client就应该直接去访问ProxyProxy和RealSubject之间背后要做的事情很复杂。
4. 代码演示Proxy 代理模式
4.1 常规方法
以下是一个简单的示意性的例子按照常规的做法创建接口RealSubject作为实际对象ClientApp直接声明一个Subject的接口真正实际创建的是一个RealSubject的对象。
client.cpp
//接口
class ISubject{
public:virtual void process();
};class RealSubject: public ISubject{
public:virtual void process(){//....}
};class ClientApp{ISubject* subject;public://构造器ClientApp(){subjectnew RealSubject();}void DoTask(){//...subject-process();//....}
};这种方式是不合适的可能是由于性能、安全控制、分布式等原因无法达到new RealSubject();此时应该怎么去做呢
4.2 Proxy 代理模式
使用Proxy 代理模式模式的做法如下
proxy.cpp
class ISubject{
public:virtual void process();
};//Proxy的设计
class SubjectProxy: public ISubject{public:virtual void process(){//对RealSubject的一种间接访问//....}
};class ClientApp{ISubject* subject;public:ClientApp(){subjectnew SubjectProxy();}void DoTask(){//...subject-process();//....}
};proxy.cpp有时候是自己写有时候是使用工具生成的。创建接口class SubjectProxy: public ISubject,SubjectProxy实现一种对RealSubject的间接访问在class ClientApp中创建subjectnew SubjectProxy(); SubjectProxy()针对RealSubject()的代理。
Proxy 代理模式常常会设计的比较复杂但是整体的设计思想要进行理解。
5. 要点总结
“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中直接使用某些对象会带来很多问题作为间接层的proxy对象便是解决这一问题的常用手段。具体proxy设计模式的实现方法、实现粒度都相差很大有些可能对单个对象做细粒度的控制如copy-on-write技术有些可能对组件模块提供抽象代理层在架构层次对对象做proxy。
具体到实际中以下代码的差异度相当大总体设计思想遵循代理类(SubjectProxy)和实际类(RealSubject)的接口(ISubject)是一致的 virtual void process(){//对RealSubject的一种间接访问//....}copy-on-write技术字符串类中经常如此去做如果对象没有什么更改的话复制的话内部会生成一个指针指向原来的对象每拷贝一次都是浅拷贝这种共享在当你需要改这个对象时就是有问题的此时你就需要内部拷贝一份实现一种代理 在分布式系统中会大量使用Proxy 代理模式
Proxy并不一定要求保持接口完整的一致性只要能够实现间接控制有时候损及一些透明性是可以接受的。
代理的核心思想是增加一个中间层实现不为外界所知的功能
6. 其他参考
C设计模式——代理模式