一、适配器模式定义
考虑如下图场景:家里目前只有三孔插座,但是我们的电器却是两脚的插头,怎么办?
此时我们会改变三脚插座为双脚,或者调整用电器的双脚插头为三脚吗?当然不会,因为这样改动的成本太高。那应该怎么办呢?通常会找一个转接头,通过转接头将三脚插座适配成两脚的样式。如下图所示:
通过上述生活中的真实案例,我们很容易理解何为适配器模式,适配器模式就是上述的转接头,是保证提供方和使用方不变的情况下,通过类/接口转化器,使得使用方和提供方可以亲密无间地合作。
二、适配器模式的优势
1、永恒不变的解耦,可以将使用方和提供方解耦,无需强相关。
2、更加灵活,使用方和提供方都无需改变,提供其扩展性。
三、样例代码
通过上文描述,我们可以很轻松的理解适配器模式的关键就在于“转化”二字。就是将源对象转化为目标对象的接口,也就是下图的Adapter。
//三孔插座
public class target3Hole {
protected void adaptee(){};
}
//两孔插头
public interface client2Foot {
void request();
}
//实现适配器,它是一个三孔插座,同时实现了两孔插头
public class adapter extends target3Hole implements client2Foot {
@Override
public void request() {
adaptee();
}
}
如上就是适配器的核心,适配器会继承目标对象,并且实现请求接口。这样便可以将请求接口转化为目标对象执行,达到适配转化的目的。
四、使用场景
1、接口兼容适配
这是适配器最常用的场景,在很多源码中都随处可见。本文上述案例就属于这个场景。
2、数据源适配
当两个数据不匹配时,也可以使用适配器模式将A数据映射到B数据中。
3、类对象转换
常用在现有对象的复用中。可以通过适配器将我们期待的操作转化为现有对象的执行,以实现功能。