代理模式

代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。

使用代理模式创建代表对象,让代表对象控制某个对象的访问,被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。
代理模式

举个栗子:

高老庄的故事

唐僧在西天取经的路上,经过高老庄悟空为了将高家三小姐救出八戒的魔掌,悟空扮作高小姐会一会这个妖怪。

高三小姐的神貌和本人

悟空的下手之处是将高三小姐的神貌和她本人分开,这和“开-闭”原则有异曲同工之妙。这样一来,“高三小姐本人”也就变成了“高三小姐神貌”的具体实现,而“高三小姐神貌”则变成了抽象角色,如下图所示。
代理模式

悟空扮演并代替高三小姐

悟空巧妙地实现了“高三小姐神貌”,也就是说同样变成了“高三小姐神貌”的子类。悟空可以扮演高三小姐,并代替了高三小姐会见八戒,其静态结构图如下图所示。
代理模式

悟空代替“高三小姐本人”去会见猪八戒。

显然这就是代理模式的应用。具体地讲,这就是保护代理模式的应用。只有代理对象认为合适时,才会将客户端的请求传递给真实主体对象。

八戒分辨不出真假老婆

从《西游记》的描述可以看出,猪八戒根本分辨不出悟空扮演的“高三小姐替身”和“高三小姐本身”。客户端分辨不出代理主体对象与真实主体对象,这是代理模式的一个重要用意。

悟空代替高三小姐会见八戒的对象图如下图所示。
代理模式