Bootstrap

Adapter Design Pattern(适配器模式)

Adapter Design Pattern(适配器模式)

适配器模式的作用
关联两个不相关的类,使他们可以在一块工作
案例
手机电压与插座之间实现适配者模式
手机电压

public class Volt {
    //电压
    private int volts;
    public Volt(int v){
        this.volts=v;
    }
    public int getVolts() {
        return volts;
    }
    public void setVolts(int volts) throws Exception {
        this.volts = volts;
    }
}

插座电压

public class Socket {
    //提供获取插座电压的方法
    public Volt getVolt() {
        return new Volt(120);
    }
}

提供将插座电压转为手机电压的规范

public interface SocketAdapter {
    public Volt get120Volt();
    public Volt get12Volt();
    public Volt get3Volt();
}

两种方式实现规范

/**
 * 适配器实现方式之一
 * 继承Socket类 调用获取电压的方法
 * 适配器使用继承的方式
 */
public class SocketClassAdapterImpl extends Socket implements SocketAdapter {
    @Override
    public Volt get120Volt() {
        return getVolt();
    }

    @Override
    public Volt get12Volt() {
        Volt v = getVolt();
        return convertVolt(v, 10);
    }

    @Override
    public Volt get3Volt() {
        Volt v = getVolt();
        return convertVolt(v, 40);
    }

    private Volt convertVolt(Volt v, int i) {
        return new Volt(v.getVolts() / i);
    }
}
/**
 * 适配器实现之一
 * 创建Socket对象获取插座的电压
 */
public class SocketObjectAdapterImpl implements SocketAdapter {
    //对适配器使用合成的方式
    private Socket sock = new Socket();
    @Override
    public Volt get120Volt() {
        return sock.getVolt();
    }
    @Override
    public Volt get12Volt() {
        Volt v= sock.getVolt();
        return convertVolt(v,10);
    }
    @Override
    public Volt get3Volt() {
        Volt v= sock.getVolt();
        return convertVolt(v,40);
    }
    private Volt convertVolt(Volt v, int i) {
        return new Volt(v.getVolts()/i);
    }
}
;