看图说话,谈谈adapter,proxy,facade,bridge模式的区别与联系
适用人群:对模式有一定了解,但又死扣区别的人。个人意见,仅供参考。
adapter_class vs adapter_object
适配器模式有两类,一种叫类适配器(adapter_class ),另一类是对象适配器(adapter_object) 。它俩的区别主要体现在adapter和adaptee的关系上
如果是类继承关系则为adapter_class ,如果是对象属性关系,则是adapter_object
如图所示:

adapter vs proxy
适配模式是将一个类的接口转换成客户希望的另外一个接口。
代理模式是为其他对象提供一种代理以控制对这个对象的访问。
这是我们常见到的定义,但是还是让初学者摸不清头脑 ,adapter和proxy到底有什么区别?
adapter是适配adaptee和target之间的关系 ,proxy是realSubject对subject的代理。
adaptee和target无关系,realSubject和s ubject有继承关系。这就是他们的区别。
请看下图:

facade vs others
facade用于为复杂的子系统定义一个新的简单易用的接口。
它的重点在
1 封装复杂的子系统,对外提供一个简单的访问入口。
2 降低外界和子系统的耦合度。加了facade入口 ,外界就只依赖facade入口,而不用依赖子系统的其他类。
如图所示:

bridge vs others
bridge用于将一个抽象与多个可能的实现连接起来。
它是解决抽象类与其实现类之间依赖关系问题,可以使得抽象和实现各 自独立且动态结合。
它使用了composition替代了inheritance ,从而解除了抽象类和实现类间的耦合。体现了Favor object composition over class inheritance。
如图所示

No comments:
Post a Comment