请问大神们指点一下关于C++代理(委托)设计模式的问题

static void function()
{
printf("this is a function\n");
}

class Fun
{
public:
virtual void func() = 0;
};

class RealFun : public Fun
{
public:
void func()
{
function();
}
};

class DelegateFun :public Fun
{
public:
RealFun *realFun;
DelegateFun()
{
realFun = new RealFun;
}
void func()
{
realFun->func();
printf("this is a delegate\n");
}
};

int _tmain(int argc, _TCHAR* argv[])
{
DelegateFun delegateFun;
delegateFun.func();
getchar();
return 0;
}
我想问一下我这个简单的例子算不算代理设计模式,这样是不是绑定了全局函数

2个回答

可以算代理模式,但是你要知道什么情况下用代理模式。

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

你的程序中一个全局函数,写一个代理模式,这个叫做画蛇添足。我可以给你一个实际的场景,你体会下。

比如你有一个函数,fun();
你原先直接调用它就好了。

现在我们需要改一改,这个函数我们放在服务器上,而你的调用放在另一个客户计算机上。
现在的问题来了,都不是一个计算机,你怎么调用服务器上的这个函数呢?
你想到了一个办法,服务器上用socket监听一个端口,如果有别的计算机和它通讯,告诉它应该调用fun,并且传什么参数,这个网路通讯的程序就去调用fun(),传入参数,并且把fun()的结果通过网络返回客户端。

客户端怎么做?因为问题转化为网络通讯了,而不是调用函数了,当然,你可以直接写死,怎么发数据,怎么收数据。这样就完成了功能。

但是你也可以用代理模式封装一下,做法和服务器的socket类似,你也写一个函数,叫fun(),表面上看它和服务器上的那个一样,但是它不实际实现fun()真正的功能,而是接受传入的参数,开一个网络连接,发送函数调用的请求,服务器返回的数据作为它的返回再返回。

这样你的客户端调用这个客户端上的fun()感觉好像是这个fun()就是一个实际有功能的函数一样,这就是代理模式的用处。

qq_20399407
qq_20399407 谢谢你的回答,对我理解代理设计模式很有帮助
大约 5 年之前 回复

没有人,自己顶一哈,求帮助

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问