代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的类图如下:
代理模式是个比较有意思的设计模式。因为如果我们只是想限制对另一个对象的函数的调用,我们完全可以用一个接口,让另外一个对象继承这个接口。
代理模式关键的一种关系就是Proxy与RealSubject之间的关联关系。正因为这个关联关系,我们直接可以通过Proxy的对象来访问RealSubject的对象。那么我们何时需要代理模式呢?
我认为第一种当RealSubject是个干净的类的时候,我们可以通过Proxy类在调用RealSubject方法的时候,添加一些额外的逻辑,例如打印log等。
第二种情况是我们不想或者不能把RealSubject提供给别的调用者,因为调用者完全可以通过RealSubject * object = new RealSubject ()来访问RealSubject中的别的函数,他们错误的调用的时候可能引发不可预期的结果,最后烂摊子还得我们自己收拾。
在游戏中有不少代理模式,特别在各种交互的地方。