“学习OO好榜样”之Adapter模式
我对Adapter模式的理解是:
某处有一些需求,可体现为Target接口(不妨假定Target有两个方法,m1、m2)。
我们在满足该需求的时候,即构造类来实现Target接口的时候,很容易想到的是看看是否存在已有资源可被利用(重用)。
比方说,此时我们发现Adaptee类实现了方法m1,如何重用?
两种重用方式分别对应于Adapter模式的两种形态:
1 继承的方式——类的Adapter模式
Adapter类从Adaptee类继承,于是自然拥有了方法m1。再自行实现方法m2,便完成了对Target接口的实现。
2 合成/聚合的方式——对象的Adapter模式
Adapter拥有一个Adaptee类型的属性,方法m1的实现委托给该属性实例的方法m1来做。再自行实现方法m2,也完成了对Target接口的实现。
哪种方式好呢?我强烈认为后者好些。满足合成/聚合复用原则。
事实上,后者确实更加灵活,比如Adaptee所拥有的方法m1名字叫做m3,但其实现的功能与Target要求的方法m1完全一样,或者只需稍微转换一下输出结果的格式。那么类的Adapter模式就不适用了,而对象的Adapter模式依然可以面带微笑。
总之,我认为Adapter模式是基于重用考虑的一种模式。
你要什么(接口),我就给你什么(实现类),我从哪里攒叨出来的方法实现,你就不用关心了(封装实现逻辑、实现方式)。你只需知道我是你所需接口的实现类。