1 适配器模式定义
适配器将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作,也就是说适配器的功能是把一个接口转换成另一个接口。
2 适配器组成
适配器模式由三部分组成:需要适配的类、标准接口、适配器。
需要适配的类(Adaptee):已经存在的类,我们想用这个类中的方法,但是它不符合我们既有的标准接口
标准接口(Target):客户所期待的接口,标准接口可以是抽象类或者接口。
适配器(Adapter):通过包装一个需要适配的类,把需要适配的类转换成目标接口。
3 代码示例
我们以手机充电器为例说明,家庭用电是220v电压、经过充电器的降压可以降到5v,也就是手机需要的电压。
首先是手机类:
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public class MobilePhone {
public void charge(V5Source v5Source) {
int powerValue = v5Source.providePowerNormalValue();
System.out.println("电压值:" + powerValue);
}
}
手机需要5v的电压充电(V5Source),但家庭用电是220v,要想办法将220v转换成5v。下面是220v电压类:
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public class V220Source {
public int providePowerValue() {
return 220;
}
}
V220Source是adaptee,已经存在的类,要适配成5v。下面是5v接口:
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public interface V5Source {
public int providePowerNormalValue();
}
V5Source即是标准接口Target。下面我们写适配器adapter:
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public class Adapter implements V5Source {
private V220Source mAdaptee;
//组合
public Adapter(V220Source adaptee) {
mAdaptee = adaptee;
}
@Override
public int providePowerNormalValue() {
int value220 = mAdaptee.providePowerValue();
//经过其他操作,将value220转换成5
return 5;
}
}
测试类:
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public class Test {
public static void main(String[] args) {
MobilePhone mobilePhone = new MobilePhone();
Adapter adapter = new Adapter(new V220Source());
mobilePhone.charge(adapter);
}
}
上面构造adapter使用的组合方式,也可以使用继承方式。
package adapter;
/**
* Created by liuliu on 2017/6/10.
*/
public class Adapter extends V220Source implements V5Source {
@Override
public int providePowerNormalValue() {
int value220 = providePowerValue();
//经过其他操作,将value220转换成5
return 5;
}
}
由上可知,我们使用一个适配器完成了把220V转化了5V然后提供给手机使用,原有的手机类、220V电压类都不需要变化,且手机(客户端)和220V(被适配者)完全解耦。
之前写的适配器博客:http://blog.csdn.net/beixiaozhang/article/details/51282297
希望大家批评指正,Android开发交流群:576500546