设计模式6-适配器模式

定义

适配器模式是作为两个不兼容的接口之间的桥梁,这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

其功能是将一个类的接口转换成业务需要的另一个接口,适配器模式目的是将原本由于接口不兼容而不能一起工作的类能够一起工作。

实现

适配器的实现还是比较简单的,核心思想就是揉合,这也是所谓的结构型模式的一种体现。

首先定一个一个目标接口,这个接口是业务直接操控的,目的是将其他类转换为我们希望的接口

然后定一个适配器,这个适配器将被适配的接口和适配器组合到一起。

Android 的adapter就是很典型的适配器模式

adapter接口 -> ListAdapter接口 -> BaseAdapter抽象类 -> ArrayAdapter类 ->填充到adapterView

我来实现一个简单的适配器

适配器可以通过接口进行揉合,也可以直接抽象类定死业务流程。

使用接口实现适配器

1
2
3
public class IRefuel{
public void refuel();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class RefuelImpl implement IRefuel{
private boolean isGas = true;

public RefuelImpl(boolean isGas){
this.isGas = isGas;
}

@Override
public void refuel(){
if(isGas){
return new GasRefuel().refuelGas();
}else{
return new PowerRefuel().refuelPower();
}
}
}

这个RefuelImpl就是一个很简单的接口适配器,整合了两个不同的接口进来。

使用抽象类实现适配器

1
2
3
public abstract class Refuel{
public void refuel();
}
1
2
3
4
5
6
public PowerRefuel extends Refuel{
@Override
public void refuel(){

}
}
1
2
3
4
5
6
public GasRefuel extends Refuel{
@Override
public void refuel(){

}
}

抽象类实现的适配器,能够在抽象父类中做逻辑的整合,这也是抽象类对比接口的优点。但是缺点就是单一继承。

优点

1、可以让任何两个没有关联的类一起运行
2、提高了类的复用
3、增加了类的透明度
4、灵活性好

缺点

1、过多的使用适配器,会让系统非常凌乱
2、由于java至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类