Adapter Design Pattern(适配器模式)
适配器模式的作用
关联两个不相关的类,使他们可以在一块工作
案例
手机电压与插座之间实现适配者模式
手机电压
public class Volt {
//电压
private int volts;
public Volt(int v){
this.volts=v;
}
public int getVolts() {
return volts;
}
public void setVolts(int volts) throws Exception {
this.volts = volts;
}
}
插座电压
public class Socket {
//提供获取插座电压的方法
public Volt getVolt() {
return new Volt(120);
}
}
提供将插座电压转为手机电压的规范
public interface SocketAdapter {
public Volt get120Volt();
public Volt get12Volt();
public Volt get3Volt();
}
两种方式实现规范
/**
* 适配器实现方式之一
* 继承Socket类 调用获取电压的方法
* 适配器使用继承的方式
*/
public class SocketClassAdapterImpl extends Socket implements SocketAdapter {
@Override
public Volt get120Volt() {
return getVolt();
}
@Override
public Volt get12Volt() {
Volt v = getVolt();
return convertVolt(v, 10);
}
@Override
public Volt get3Volt() {
Volt v = getVolt();
return convertVolt(v, 40);
}
private Volt convertVolt(Volt v, int i) {
return new Volt(v.getVolts() / i);
}
}
/**
* 适配器实现之一
* 创建Socket对象获取插座的电压
*/
public class SocketObjectAdapterImpl implements SocketAdapter {
//对适配器使用合成的方式
private Socket sock = new Socket();
@Override
public Volt get120Volt() {
return sock.getVolt();
}
@Override
public Volt get12Volt() {
Volt v= sock.getVolt();
return convertVolt(v,10);
}
@Override
public Volt get3Volt() {
Volt v= sock.getVolt();
return convertVolt(v,40);
}
private Volt convertVolt(Volt v, int i) {
return new Volt(v.getVolts()/i);
}
}