独角兽企业重金招聘Python工程师标准>>>
代理模式中,客户不会直接调用目标对象而是通过一个代码对象,客户调用代理对象代理对象去调用目标对象,起到对象与对象间的隔离作用。有时候我么不想直接访问目标对象,有时候我们不能直接访问目标对象这时候就需要一个代理对象来代替我们访问目标对象了。
简单的例子,VPN,我们要访问外网资源由于种种原因不能访问,我们可以通过一个代理服务器,而代理服务器可以访问外网,我们通过访问代理服务器来简介访问外网,我们不需要知道代理服务器是如何具体访问外网只要它能满足我们的要求即可。
代理模式通常是通过一个代理对象来持有对目标对象的引用来完成对目标对象的代理。类图如下(摘自互联网):
代理模式通过跟装饰器模式非常像,代理模式更加关注的是对象的访问控制,而装饰器模式关注的是对对象的增强,代理模式通过会直接在代理对象中持有目标对象的引用,而装饰器模式通常需要传入目标对象的引用,代理模式代理对象与目标对象的关系在编译器就确定了,而装饰器模式装饰器与目标对象其实是在运行期确定的。