设计模式之十二------Proxy(代理)

来源:互联网 发布:阿里云域名如何转让 编辑:程序博客网 时间:2024/06/05 16:35

问题:

有一组类共同实现一个借口,我们想对它们加以控制,例如延时执行之类的。如果为每个类都加上这个方法,这样会让继承体系变得更大。让系统变得冗余;

解决方案:

我们可以提供一个代理类,让这个代理类实现这个接口,并添加控制操作;代理成为这个中介。这就是代理模式

比较:

以前学过一个Decorator,和这个比较类似。但是他们还是有区别的:

代理:为其它对象提供一种代理以控制对这个对象的访问。 

装饰者模式:动态地给一个对象添加一些额外的职责。 

重点一个在于增加职责,另一个在于控制访问。这是它们最本质的区别。 

源代码:

//This a programme about Proxy

#include<iostream>

using namespace std;

class Subject{

protected:

Subject(){};

public:

virtual void Operator()=0;

};

class ConcreateSubject:public Subject{

public:

ConcreateSubject(){}

virtual void Operator(){

cout<<"实际操作被调用"<<endl;

}

};

class Proxy:public Subject{

public:

Proxy(Subject *sub){

subject=sub;

}

~Proxy(){

if (subject!=NULL)

{

delete subject;

subject=NULL;

}

}

virtual void Operator(){

cout<<"代理开始工作"<<endl;

subject->Operator();

}

private:

Subject *subject;

};

void main()

{

Subject *subject=new Proxy(new ConcreateSubject);

subject->Operator();

}

原创粉丝点击