yichao firstname, zeaster nickname, zhang lastname

看图说话,谈谈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和subject有继承关系。这就是他们的区别。

请看下图:

 

 

facade vs others

 

facade用于为复杂的子系统定义一个新的简单易用的接口。

它的重点在

1 封装复杂的子系统,对外提供一个简单的访问入口。

2 降低外界和子系统的耦合度。加了facade入口,外界就只依赖facade入口,而不用依赖子系统的其他类。

如图所示:

 


 

bridge vs others

 

bridge用于将一个抽象与多个可能的实现连接起来。

它是解决抽象类与其实现类之间依赖关系问题,可以使得抽象和实现各自独立且动态结合。

它使用了composition替代了inheritance,从而解除了抽象类和实现类间的耦合。体现了Favor object composition over class inheritance。

如图所示

 


No comments: