>>版权声明:本文为原创文章,请不要拷贝转载。
1.比较
(适配器模式)
(桥接模式)
(装饰器模式)
(代理模式)
把这四个模式放在一起感觉相当微妙。笼统的讲,它们都似乎是间接引用real object,是对real object的封装,接口与实现的分离。
他们之间的区别是很微妙的,尤其是适配器和桥接之间,装饰器和代理之间的区别。
适配器和桥接之间几乎没有区别,只能说他们出发点,目的,解决的问题不同。
适配器:适配器的目的是将一种现存的已实现接口转换成调用者需要的接口。调用者需要的接口是固定的,已存在的。实际调用的接口以及它的实现也是固定的,已存在的。现在要把两者关联上。
桥接:桥接的目的是分离抽象与具体实现,使它们不直接继承。使用桥接模式的时候,项目才刚搭建,不存在具体的实现。桥接是主动为之,桥接创造了接口与实现分离,适配器恰恰想要弥合这种分离的状态。
所以从类图和最终的代码实现上是看不出实际的区别的。
装饰器和代理之间的区别很细微,看了很多人的解释,都无法自圆其说。有一个比较合理的说法,即装饰器是代理的一个子集。
装饰器:装饰器的目的是保存接口不变的情况下,在现有实现的基础上添加功能。装饰器模式下,real object是作为构造函数的参数传入的,以此来实现运行时对real object动态添加功能。
代理:代理的目的是提供一个代理来控制调用者调用。代理模式存在两种情况,一种是预先内置了一个real object对象,这种情况下在编译时就确定了效果;另一种是通过构造函数的参数传入real object,这种情况就非常类似装饰器了。
实际运用当中,其实没有必要区分的那么清楚。我想我们还是应该遵循从目的出发,选择合适的模式解决当前的问题。
注:图片来自维基百科
喜欢的话可以打赏一下哦!!!
支付宝
微信