个人随笔
目录
八、结构型-代理(Proxy)模式
2020-09-09 21:36:00

其实每个模式的名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对改地区的房屋信息掌握不够全面,希望找一个更熟悉的人帮你去做,此处的代理就是这个意思。再如果我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们操作,表达我们的想法。

1、UML


可以看到代理模式跟装饰者模式基本上一样的UML,但是实现是不同的,装饰者模式是将要装饰的对象传到到装饰者中,然后对对象进行额外操作,但是代理模式是直接在代理类中new对象,不需要外部传进来,全程交由代理模式解决。这个使他们的区别点。

2、装饰者模式和代理模式的区别

1、装饰模式:

  1. 在不改变接口的前提下,动态扩展对象的访问。
  2. 动态继承,让类具有在运行期改变行为的能力。
  3. 装饰模式,突出的是运行期增加行为,这和继承是不同的,继承是在编译期增加行为。
  4. 强调:增强

2、代理模式:

  1. 在不改变接口的前提下,控制对象的访问。
  2. 从封装的角度讲,是为了解决类与类之间相互调用而由此导致的耦合关系,可以说是接口的另外一个层引用。比如:在a类->b代理->c类这个关系中,c类的一切行为都隐藏在b中。即调用者不知道要访问的内容与代理了什么对象。
  3. 从复用的角度讲,可以解决不同类调用一个复杂类时,仅仅因较小的改变而导致整个复杂类新建一个类。比如:a类->c1b类->c2。可以变为a类->ca代理类->c类;b类->cb代理类-c类。
  4. 代理模式,是类之间的封装和(某方面的)复用。
  5. 强调:限制

装饰模式可以让使用者直观的看到增强了哪些功能,而代理模式完全限制了使用者。客户端是看不到被代理类的任何操作。

3、Sourceable

  1. /**
  2. * 共同的接口
  3. * @author suibibk.com
  4. */
  5. public interface Sourceable {
  6. public void method();
  7. }

4、被代理类Source

  1. /**
  2. * 被代理类
  3. * @author suibibk.com
  4. */
  5. public class Source implements Sourceable{
  6. @Override
  7. public void method() {
  8. System.out.println("打官司");
  9. }
  10. }

5、代理类Proxy

  1. /**
  2. * 代理模式:这里跟装饰者模式的区别是,不需要传入source对象
  3. * @author suibibk.com
  4. */
  5. public class Proxy implements Sourceable{
  6. private Source source;
  7. public Proxy() {
  8. super();
  9. source = new Source();
  10. }
  11. @Override
  12. public void method() {
  13. System.out.println("收集资料");
  14. source.method();
  15. System.out.println("法庭辩论");
  16. }
  17. }

这里就可以很明显的看到代码上跟装饰者模式的区别了,不需要外部传入Source,直接new实例。

6、测试类Test

  1. /**
  2. * 测试类:在客户端看不到Source的实例
  3. * @author suibibk.com
  4. */
  5. public class Test {
  6. public static void main(String[] args) {
  7. new Proxy().method();
  8. }
  9. }

可以看到,我们的客户端完全看不到Source的存在,运行结果如下:

  1. 收集资料
  2. 打官司
  3. 法庭辩论

总结

其实我上面的例子不是很符合,输出结果没有很好的区分装饰者模式和代理模式,但是呢,通过代码应该可以区分开来,其实按我的理解来说,代理模式,只需要一个代理,而装饰者模式,可能需要很多装饰者,可能是一个团队,就比如Java的IO来说,就有超级多装饰者,主要侧重于功能的增强,但是代理模式,感觉是侧重于委托。可能理解有误,望指正。:bowtie:

 464

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2