设计模式专辑——适配器模式、桥接模式、装饰器模式、代理模式的比较

 >>版权声明:本文为原创文章,请不要拷贝转载。

 

1.比较

(适配器模式)

(桥接模式)

 

 

(装饰器模式)

 

(代理模式)

把这四个模式放在一起感觉相当微妙。笼统的讲,它们都似乎是间接引用real object,是对real object的封装,接口与实现的分离。

他们之间的区别是很微妙的,尤其是适配器和桥接之间,装饰器和代理之间的区别。

 

适配器和桥接之间几乎没有区别,只能说他们出发点,目的,解决的问题不同。

适配器:适配器的目的是将一种现存的已实现接口转换成调用者需要的接口。调用者需要的接口是固定的,已存在的。实际调用的接口以及它的实现也是固定的,已存在的。现在要把两者关联上。

桥接:桥接的目的是分离抽象与具体实现,使它们不直接继承。使用桥接模式的时候,项目才刚搭建,不存在具体的实现。桥接是主动为之,桥接创造了接口与实现分离,适配器恰恰想要弥合这种分离的状态。

所以从类图和最终的代码实现上是看不出实际的区别的。

 

装饰器和代理之间的区别很细微,看了很多人的解释,都无法自圆其说。有一个比较合理的说法,即装饰器是代理的一个子集。

装饰器:装饰器的目的是保存接口不变的情况下,在现有实现的基础上添加功能。装饰器模式下,real object是作为构造函数的参数传入的,以此来实现运行时对real object动态添加功能。

代理:代理的目的是提供一个代理来控制调用者调用。代理模式存在两种情况,一种是预先内置了一个real object对象,这种情况下在编译时就确定了效果;另一种是通过构造函数的参数传入real object,这种情况就非常类似装饰器了。

 

实际运用当中,其实没有必要区分的那么清楚。我想我们还是应该遵循从目的出发,选择合适的模式解决当前的问题。 

 

 注:图片来自维基百科

 

喜欢的话可以打赏一下哦!!!

支付宝

微信

posted @ 2019-01-16 11:20  PaganMonkey  阅读(1482)  评论(0编辑  收藏  举报

喜欢的话可以打赏一下哦!!!

支付宝

微信