适配器模式

来源:互联网 发布:吉他软件电脑版 编辑:程序博客网 时间:2024/06/02 04:48

适配器模式将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。
适配器模式有三个特点:

  1. 适配器对象实现原有接口
  2. 适配器对象组合一个实现新接口的对象(这个对象可以不识闲一个接口,只是一个单纯的对象)
  3. 对适配器原有接口方法的调用被委托给新接口的实例的特定方法

下面我们举一个充电器的例子,比如我们去美国旅游,我们来到一家旅店需要用美国充电器才能充电,而我们带的是中国的充电器,那么我们在美国的旅馆就用不成,我们就需要一个适配器来把我们的中国充电器包装成美国充电器。
先定义一个美国充电器接口

public interface IAmerciaCharger{    public void charge();}

然后需要一个美国充电器来实现这个类

public class AmerciaCharger implements IAmerciaCharger{    @Override    public void charge(){        System.out.println("美国充电器来充电了");    }}

然后是一个美国旅馆

public class Hotel{private IAmerciaCharger charger;//需要传入美国充电器public Hotel(IAmerciaCharger charger){    this.charger=charger;}public void setCharger(IAmerciaCharger charger){    this.charger=charger;}    //在美国充电public void power(){        charger.charge();    }}

然后是我们的中国充电器接口

public interface IChinaCharger{//这里大家肯定好奇,直接实现美国充电器接口不就好了,其实不然,中国充电器和美国充电器内部原理不同,所以各有//各自的充电方式    public void chargeWithChinese();}

下面是中国充电器的实现

public class implements IChinaCharger{    @Override    public void chargeWithChinese(){        System.out.println("中国的高大上充电器");    }}

然后是我们的适配器类,把我们中国充电器包装成美国充电器,然后以假乱真在旅馆充电

public class Adapter implements IAmerciaCharger{private IChinaCharger chinaCharger;public Adapter(IChinaCharger chinaCharger){        this.chinaCharger=chinaCharger;    }    @Override    public void charge(){        //这里就是中国的充电器在充电        chinaCharger.chargeWithChinese();    }}

然后就是测试类

public class Test{    public static void main(String []args){        Hotel hotel=new Hotel();        IAmericaCharger america_charger=new AmericaCharger();        hotel.setCharger(america_charger);        //美国充电器要来充电了        hotel.power();        //中国要充电怎么办,来找我们的适配器        IChinaCharger china_charger=new ChinaCharger();        Adapter adapter=new Adapter(china_charger);        //我们的adapter完全符合标准        hotel.setCharger(adapter);        hotel.charge();    }}
原创粉丝点击