设计模式之适配器模式
前言
前面的几个小节中,我们学习了设计模式中的构建形的设计模式,包括了单例模式、工厂模式、建造者模式以及原型模式,接下来的几个小节中,我们将学习设计模式的另外一个部分,结构类型的设计模式,本小节主要学习适配器模式
适配器模式的简单介绍
说到适配器(注意,不是适配器模式),相信大家应该不陌生吧,生活中我们经常需要用到适配器,比如说目前比较热门的安卓充电线的接头,之前主要一直都是micro type b类型的接口,而现在主要的是Type-c接口,当我们只有micro type b类型的充电线,但是手机的接口是Type-c,这个时候我们可以选择购买一根Type-c接口的充电线,也可以选择购买一个micro type b 转Type-c的适配器,然后我们的micro type b充电线就可以给Type-c接口的手机充电了,这个其实就可以理解为适配器模式的应用了,当然,这里我们所指的适配器模式主要应用在软件开发领域。
适配器模式的具体实现
这里,我们按照前面介绍的充电线接口模型来编写代码,具体看下适配器模式是怎么样一回事以及适配器模式是怎么起作用的
这里我们需要一个MicroTypeB类,表示MicroTypeB接口类型的充电线,如下所示:
class MicroTypeB{
public void charge(){
System.out.println("MicroTypeB charging....");
}
}
同时,我们有一个TypeC接口的手机
interface TypeC{
void charge();
}
class TypeCPhone{
TypeC typeC;
public TypeCPhone(TypeC typeC) {
this.typeC = typeC;
}
public void charge(){
typeC.charge();
}
}
很显然,当我们的手机没电的时候,MicroTypeB接口的充电线是没有办法帮上忙的,所以我们需要一个适配器
class TypeCAdapter implements TypeC{
MicroTypeB microTypeB;
public TypeCAdapter(MicroTypeB microTypeB){
this.microTypeB = microTypeB;
}
@Override
public void charge() {
microTypeB.charge();
}
}
测试的客户端如下所示
public static void main(String[] args) {
MicroTypeB microTypeB = new MicroTypeB();// MicroTypeB充电线
TypeC typeC = new TypeCAdapter(microTypeB); // TypeC接口
TypeCPhone phone = new TypeCPhone(typeC);
phone.charge();
}
运行程序,可以看到,我们的TypeC接口类型的手机成功地使用了MicroTypeB类型的充电线,这使得原本不匹配的接口类型变得匹配了。
适配器模式的应用场景
适配器模式的应用场景其实是相当广泛的,特别是当我们拿到一份代码,无法或者不希望对其进行修改,却需要使用其中的一些功能,但是其中的接口跟我们所要的接口类型不一致的时候,适配器模式就排上了很大的用场,正如我们可以使用一个适配器,使得Type-c接口的手机可以使用micro type b接口类型的充电线一样,我们可以编写一个适配器接口,使得原本不适合的使用的接口转化为适配的接口(这里需要注意的是,使用可以不需要知道谁匹配了适配器,只需要知道适配器所提供的接口是适合使用的即可)。
总计
本小节我们主要学习了适配器模式,包括了适配器模式的简单理解,并且通过充电线模式,编写代码实现了一个适配器,加深对适配器模式的理解,设计模式的学习之路还在继续。