标签:java设计模式—–实验楼
[TOC]
[实验楼文档—-适配器模式][1]
什么是适配器模式
适配器模式(Adapter pattern)就是用来适配的,当你想使用一个已有的类,但是这个类的接口跟你的不一样,同时又不能直接拿来用,这个时候就需要一个适配器来帮忙,
生活化的例子就是你在香港买了港版的iphone6,充电器的擦回头拿回家一看,不能使用。这个时候就需要一个转接头适配器。
适配器模式示例代码
//英标接口
public interface EnPluginInterface {
void chargeWith3Pin();// 三头插座
}
//英标插座
public class EnPlugin implements EnPluginInterface {
public void chargeWith3Pin()
{
System.out.println("charge with EnPlugin");
}
}
//家类,实现插座充电,待会儿我们使用适配的时候,只需将charge()重载为国标充电
public class Home {
private EnPluginInterface enPlugin;
public Home() {
// TODO Auto-generated constructor stub
}
public Home(EnPluginInterface enPlugin) {
this.enPlugin = enPlugin;
}
public void setPlugin(EnPluginInterface enPlugin) {
this.enPlugin = enPlugin;
}
public void charge() {
enPlugin.chargeWith3Pin();
}
}
//英标充电的Test类
public class Test {
public static void main(String[] args) {
EnPluginInterface enPlugin = new EnPlugin();//新建一个英国插座
Home home = new Home(enPlugin);//在家里面充电
}
}
//问题的关键在于我们回国了,国内的插座标准是双孔,我们既要使用转换器了
//转换器肯定是必须的,但是转换器的结果是使用双孔,因此我们要实现一个双孔的插座
//国标插座接口,接口中的未定义方法是给子类实现的,基本上就是写完了
public interface CnPluginInterface {
void chargeWith2Pin();
}
//国标插座实现
public class CnPlugin implements CnPluginInterface {
@Override
public void chargeWith2Pin() {
// TODO Auto-generated method stub
System.out.println("charge with 2 pins");
}
}
//适配器(转换器)实现,去实现英标接口,但是重载国标的方法,这里面包含另一个累的对象,才能完成重载操作,可以说这简单的三步走是所适配的根本套路。所有适配器都是按照这个来的
public class PluginAdapter implements EnPluginInterface {
private CnPluginInterface cnPlugin;
public PluginAdapter(CnPluginInterface cnPlugin) { //传进来
this.cnPlugin = cnPlugin;
}
@Override
public void chargeWith3Pin() {
// TODO Auto-generated method stub
cnPlugin.chargeWith2Pin();//丢出去
}
}
//适配器测试(也是进行适配流程的演示,最简单的操作,基本流程)
public class TestAdapter {
public static void main(String[] args) {
CnPluginInterface cnPlugin = new CnPlugin();//准备数据源
Home home = new Home();
PluginAdapter pluginadapter = new PluginAdapter(cnPlugin);//准备适配器
home.setPlugin(pluginadapter);//适配,虽然方法中这个参数是EnPluginIntergin
home.charge();//终于能充电了
}
}
恰好应了适配器模式的定义,我的手机充电器就是我想用的已有的类,但是这个类接口又和我的插座不一样,不能直接使用,这个时候就需要一个转换器(适配器),可能是已有的类很重要,一点不能丢,,哈哈哈,舍不得呀
适配器模式的应用
主要作用就是在旧的接口,新的接口之间完成适配
比如说安卓在listView中的适配器,原来只是一个模式呀,。在这里使用,真的是厚积薄发