概念:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
解决的问题:
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
使用场景:
- 我们在使用第三方的类库,或者说第三方的API的时候,我们通过适配器转换来满足现有系统的使用需求。
- 有动机地修改一个正常运行的系统的接口,也就是我们的旧系统与新系统进行集成的时候,我们发现旧系统的数据无法满足新系统的需求,这时应该考虑使用适配器模式。
- 我们在使用不同数据库之间进行数据同步。
注意事项:
适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。
核心代码:
public class V5adapter implements Power{
private V220power v220power=new V220power();
@Override
public int provide() {
System.out.println("适配器插入电源,得到"+v220power.v220()+"V电压");
/**经过一系列操作*/
System.out.println("经过转换,220V-变成了5V");
System.out.println("最终输出 5 V");
return 5;
}
}
power是接口(父类)规范,在不改变原有结构的情况下,新增一个power的实现类adapter(子类),在adapter中重写接口方法,历经转换(可以在原来基础上修改,也可以接入新资源来实现),得到需要的资源和结果。
完整demo
需要适配器修改的地方,原来的power是220V家用电源电压,现在需要转变为5V的手机充电电压
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class Mobile {
public void inputPower(Power power){
System.out.println("手机充电中,使用的是"+power.provide()+"V电压");
}
}
power接口定义
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public interface Power {
public int provide();
}
家用电源,提供220V电压
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class V220power implements Power{
private int power = 220;
public int provide(){
System.out.println("家用电源,提供"+this.power+"V电压");
return 220;
}
}
适配器类,实现转换电压的功能
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class V5adapter implements Power{
private V220power v220power=new V220power();
@Override
public int provide() {
System.out.println("适配器插入电源,得到"+v220power.provide()+"V电压");
/**经过一系列操作*/
System.out.println("经过转换,220V-变成了5V");
System.out.println("最终输出 5 V");
return 5;
}
}
测试
/**
* Created by zhangjiqiang on 2016/12/29.
*/
public class Test {
public static void main(String[] args) {
Mobile mobile=new Mobile();
mobile.inputPower(new V5adapter());
}
}