代理模式是指,为其他对象提供一种代理以控制对这个对象的访问

在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用

-----------------------------------------------------------------------------------

  • 使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑

  • 客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象

  • 客户类对目标对象的访问是通过访问代理对象来实现的。当然,代理类与目标类要实现同一个接口

-----------------------------------------------------------------------------------

以生活中的“代理律师”为例来理解“代理模式”。
打官司是件非常麻烦的过程:案件调查取证、查找法律条文、起草法律文书、法庭辩论、签署法律文件、申请法院执行……但打官司的人只关心法宣判结果。此时,打官司的人就可聘请“代理律师”来完成整个打官司的所有事务。当事人只需与代理律师签订了“全权委托协议”,那么整个打官司的过程,当事人均可不出现。
聘请代理律师时以下几点需要特别说明:
(1)当事人与代理律师是在为同一件事情努力。
(2)法院所有的具体事务都是通过代理律师完成。
(3)在法院需要当事人完成某些工作时,代理律师会通知当事人,并为其出谋划策,即增强当事人

-----------------------------------------------------------------------------------

  • 使用代理模式注意:

  1. 代理类和目标类要实现同一个接口,即业务接口

  2. 客户类对目标类的调用均是通过代理类完成的

  3. 代理类的执行既执行了对目标类的增强业务逻辑,又调用了目标类的主业务逻辑

-----------------------------------------------------------------------------------

根据代理关系建立的时间不同,可以将代理分为两类:静态代理与动态代理。就好比

当事人与律师之间的关系一样,也分为法律顾问与代理律师两类