首页 > 代码库 > Android设计模式--适配器模式--Adapter入门

Android设计模式--适配器模式--Adapter入门

今天,我们要梳理一下java设计模式的适配器模式。

适配器嘛,想一想我们平常用的电源适配器就知道了,就是把两个不兼容的东西搞通嘛,可以相互联系。

shipeiqi

在java中也一样,就是让两个需要一起协调的类,通过适配器协调起来就行了,就是讲一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
首先我们来看两个图,我们通常会有这样一个问题,厂商给我接口和我们现有接口对接不起来、旧的数据和新的数据接不起来等等。

noadapter 解决这问题,在不改变原来两个接口的情况下,我们完全可以在写一个类,做个中间人,就像翻译官一样,我会两国语言,你们说话都经过我来就行了,这个适配器实现了你说期望的接口,而且这个类也能和厂商的接口沟通。hasadapter

总而言之,我们经常可以看到适配器出现在我们的代码中,如在Android便充分利用了适配器来实现view和数据的联系,如:ListView和BaseAdapter。
我们举一下一个小例子来说明一下适配器模式。
就拿我们首页的图来看,
我们国家的标准电压是220v,而我们笔记本所需的电压就15v左右;所以肯定不可以把我们的交流电直接接到笔记本上,这时,我们得有一个变压器(电源适配器)就可以了,把220v电压转换成15v;

下面介绍一下代码:

笔记本类

/**
 * 
 * 笔记本
 * @author studyjun
 *
 */
public class Jotter {
     
    private VoltageAdapter adapter;
     
    public VoltageAdapter getAdapter() {
        return adapter;
    }
 
    public void inputVoltage(){
        System.out.println("笔记本得到输入电压" +adapter.transformVoltage()+"v");
    }
     
    public void setAdapter(VoltageAdapter adapter){
        this.adapter =adapter;
    }
}

供电器220v,提供220v的电压

/**
 * 
 * 供电器
 * @author studyjun
 *
 */
public class PowerSupplyDevice {
 
    //标准电压
    private int standardVoltage =220;
     
     
    /**
     * 输出220v电压
     * @return
     */
    public int powerSupply(){
        System.out.println("标准电压提供220v");
        return standardVoltage;
    }
}

适配器接口,有个电压转换接口

/**
 * 
 * 电源适配器
 * @author studyjun
 *
 */
public interface VoltageAdapter {
     
    /**
     * 转换电压
     */
    public int transformVoltage();
}

笔记本电源适配器类,把220v转为笔记本的15v的电压

/**
 * 
 * 电源适配器
 * @author studyjun
 *
 */
public class MyVoltageAdapter implements VoltageAdapter{
     
    private int voltage; //电压
    /**
     *  标准电压设备220v
     */
    private PowerSupplyDevice powerSupplyDevice ;
     
     
    public MyVoltageAdapter(PowerSupplyDevice powerSupplyDevice) {
        this.powerSupplyDevice = powerSupplyDevice;
    }
 
 
 
    public int getVoltage() {
        return voltage;
    }
 
 
 
    public void setVoltage(int voltage) {
        this.voltage = voltage;
    }
     
    public PowerSupplyDevice getPowerSupplyDevice() {
        return powerSupplyDevice;
    }
 
 
 
    public void setPowerSupplyDevice(PowerSupplyDevice powerSupplyDevice) {
        this.powerSupplyDevice = powerSupplyDevice;
    }
 
 
    /**
     * 转换电压
     */
    public int transformVoltage(){
        int voltage = powerSupplyDevice.powerSupply();
        int lowerVoltage = voltage/14;
        System.out.println("转化中电压为="+lowerVoltage+"v");
        return lowerVoltage;
         
    }
}

测试

public class Test {
     
    public static void main(String[] args) {
         
        Jotter jt = new Jotter();
        PowerSupplyDevice powerSupplyDevice = new PowerSupplyDevice();
        VoltageAdapter adapter=new MyVoltageAdapter(powerSupplyDevice);
        jt.setAdapter(adapter);
        jt.inputVoltage();
    }
     
}

执行结果

adapterpatternresult

讲到这里,我们总结一下适配器模式的优点和缺点:
优点:
1、可以将两个不同的接口联系起来,耦合性低。
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则

类适配器的缺点:
1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。
对象适配器还有的优点:
2、与类适配器模式相比,要想置换适配者类的方法就不容易。

源代码下载:DesignPattern

 

Android设计模式--适配器模式--Adapter入门