这一章的适配器模式还是比较容易懂的。适配器的作用就是将一个接口转换成另外一个接口。
关于这方面的生动的例子,莫过于插头转换了,早期的Iphone,我们在充电的时候,总是配一个大大的转换器,这个转换器就是一个适配器,上面连接的是米国的(假设)三头插头,底下插的是我大天朝的二孔插座。
在米国,我们来看看是怎么充电的:一个客户端类:AmericanHome,一个接口AmericanPlugInterface,一个具体的接口类AmericanStandarPlug
/**
* @author dean
* 米国插头通用接口
*/
public interface AmericanPlugInterface
{
// 米国 三足
int feet = 3;
public void charging();
}
/**
* @author dean
* 美国标准,我们这里假设是用三足的插头
*/
public class AmericanStandarPlug implements AmericanPlugInterface
{
@Override
public void charging() {
System.out.println("charge with "+ feet +" feet plug");
}
}
/**
* @author dean
* 客户端
*/
public class AmericanHome
{
private AmericanPlugInterface plugInterface;
public void setPlug(AmericanPlugInterface plugInterface)
{
this.plugInterface = plugInterface;
}
public void charge(){
plugInterface.charging();
}
}
这样就可以用了(测试类我们放在最后)
同样,我大天朝的也有这几个类:一个客户端类:ChineseHome,一个接口ChinesePlugInterface,一个具体的接口类ChineseStandarPlug:
public interface ChinesePlugInterface {
int feet = 2;
public void charging();
}
/**
* @author dean
* 中国标准,我们这里假设是用两足的插头
*/
public class ChineseStandarPlug implements ChinesePlugInterface
{
@Override
public void charging() {
System.out.println("charge with "+ feet +" feet plug");
}
}
public class ChineseHome {
private ChinesePlugInterface plugInterface;
public void setPlug(ChinesePlugInterface plugInterface)
{
this.plugInterface = plugInterface;
}
public void charge(){
plugInterface.charging();
}
}
好了,米国的手机到天朝来,需要一个转换器(适配器)才能充电,那么怎么做这个适配器呢?
适配器的原则是:对目标接口(Target)实现,同时,持有被适配者(Adaptee),看类图:
目标是天朝的插头接口(ChinesePlugInterface)持有米国的插头接口(AmericanPlugInterface)
public class ChinesePlugAdapter implements ChinesePlugInterface{
AmericanPlugInterface AmericanPlugInterface;
public ChinesePlugAdapter(AmericanPlugInterface AmericanPlugInterface)
{
this.AmericanPlugInterface = AmericanPlugInterface;
}
@Override
public void charging() {
AmericanPlugInterface.charging();
}
}
建立测试类:
public class Test {
public static void main(String[] args) {
/**
* 米国插头,米国Home
AmericanHome home = new AmericanHome();
AmericanPlugInterface plugInterface = new AmericanStandarPlug();
home.setPlug(plugInterface);
home.charge();
**/
/**
* 天朝插头,天朝Home
ChineseHome home2 = new ChineseHome();
ChinesePlugInterface plugInterface2 = new ChineseStandarPlug();
home2.setPlug(plugInterface2);
home2.charge();
**/
// 米国插头,天朝Home,适配器
ChineseHome home3 = new ChineseHome();
AmericanPlugInterface plugInterface3 = new AmericanStandarPlug();
ChinesePlugAdapter adapter = new ChinesePlugAdapter(plugInterface3);
home3.setPlug(adapter);
home3.charge();
}
}
结果:
charge with 3 feet plug(对于米国充电设备,确实还是插的3足的插头,但是拥有适配器的它已经可以插进天朝的两孔插座了~)
如果理解错误,欢迎指正!