您好,您提的问题真心很好,这也是我自己一直没有想到的问题,其实三种模式都可以去解决上面的问题。说白了,这三种模式都是不改原类,新建一个类丰富原类的功能。
但是我觉得是这样(仅仅是我觉得),我们首先应该从代码的实现上来看这三种的区别。
我们先单独拿出适配器和其他两种对比最大的区别就是适配器是实现了一个新的接口,这个在我们项目开发中就代表了客户是否给你新的规范,你必须要按照着客户的新规范去开发又不能丢了老的。客户要求你用A接口去完成B接口的事情,所以还是那句话,看看有没有新的规范。
剩下2种模式,代理模式和装饰器模式就更容易找出区别,从代码上看,代理模式绝对不会暴露原类,他的目的就是想让你隐藏原类,通过一个中介去调用最终的类。本质在于拦截,就如同spring aop控制事务日志一样。。
但是我觉得是这样(仅仅是我觉得),我们首先应该从代码的实现上来看这三种的区别。
我们先单独拿出适配器和其他两种对比最大的区别就是适配器是实现了一个新的接口,这个在我们项目开发中就代表了客户是否给你新的规范,你必须要按照着客户的新规范去开发又不能丢了老的。客户要求你用A接口去完成B接口的事情,所以还是那句话,看看有没有新的规范。
剩下2种模式,代理模式和装饰器模式就更容易找出区别,从代码上看,代理模式绝对不会暴露原类,他的目的就是想让你隐藏原类,通过一个中介去调用最终的类。本质在于拦截,就如同spring aop控制事务日志一样。。
装饰器模式个相当于把一个模型放在你面前,你自己去组合,组合顺序随意。这两种真心没有什么可比性,区分的最明显的区别你是不是要暴露真正调用的类。
评论出处 http://blog.youkuaiyun.com/lulei9876/article/details/39994825