九、适配器模式

1、基本介绍

1)适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口,主要目的是兼容性,

让原本因接口不匹配不能一起工作的两个类可以协同工作

2)适配器模式属于结构性模式

3)主要分为3类:类适配器,对象适配器,接口适配器

2、工作原理

1)将一个类的接口转换成另一个接口,让原本不兼容的类可以兼容

2)从用户的角度看不到适配者,是解耦的

3)用户调用适配器转化出来的目标接口方法,适配器再调用被适配者相关接口方法

3、类适配器模式

1)类适配器模式介绍

适配器类(Adapter)通过继承src类,实现dst接口,完成src -> dst类的适配

2)类适配器应用实例

 类图

//1、被适配者
/**
 * @author houChen
 * @date 2020/9/26 7:00
 * @Description:   被适配者
 */
public class Voltage220V {
    public int output220V(){
        int src =220;
        System.out.println("电压="+src+"伏");
        return src;
    }
}

//2、适配接口
/**
 * @author houChen
 * @date 2020/9/26 7:05
 * @Description: 适配接口 :将20伏转成5伏
 */
public interface IVoltage5V {

    public int transfer5V();
}


//3、适配器
/**
 * @author houChen
 * @date 2020/9/26 7:08
 * @Description: 适配器
 */
public class VoltageAdapter extends Voltage220V implements IVoltage5V{
    @Override
    public int transfer5V() {
        int srcV = output220V();
        int dstV =srcV/44;
        return dstV;
    }
}

//4、使用适配器
public class Phone {
    public void charging(IVoltage5V iVoltage5V){
        if(iVoltage5V.transfer5V()==5){
            System.out.println("电压为5v~ 可以充电!");
        }else{
            System.out.println("电压不等于5v~ 不可以充电!");
        }
    }
}

public class Client {
    public static void main(String[] args) {
        System.out.println("类适配器模式~~~~~~~~~~");
        Phone phone =new Phone();
        phone.charging(new VoltageAdapter());
    }
}

3)类适配器注意事项

  • java是单继承机制,类适配器需要继承src类这一点算是缺点,因为这要求dst必须是接口,有一定的局限性

  • 由于其继承了src类,所以它可以根据需求重写src类的方法,使得Adapter的灵 活性增强了

4、对象适配器模式

1)基本介绍

  • 对象适配器模式基本思路和类适配器模式相同,只是将适配器类(Adapter)做修改,不是继承src类,而是持有src类的实例,持有src类的实例并且实现dist类的接口,完成src -> dst 的适配

  • 对象适配器模式是适配器模式中常用的一种

2)上述电压问题改造为对象适配器模式

//1、被适配者
/**
 * @author houChen
 * @date 2020/9/26 7:00
 * @Description:   被适配者
 */
public class Voltage220V {
    public int output220V(){
        int src =220;
        System.out.println("电压="+src+"伏");
        return src;
    }
}

//2、适配接口
/**
 * @author houChen
 * @date 2020/9/26 7:05
 * @Description: 适配接口 :将20伏转成5伏
 */
public interface IVoltage5V {

    public int transfer5V();
}


//3、适配器
public class VoltageAdapter  implements IVoltage5V {

    private Voltage220V voltage220V;

    public VoltageAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public int transfer5V() {
        int dstV =0;
        if(voltage220V!=null){
            int srcV = voltage220V.output220V();
            dstV =srcV/44;
        }
        return dstV;
    }
}


//4、使用适配器
public class Phone {
    public void charging(IVoltage5V iVoltage5V){
        if(iVoltage5V.transfer5V()==5){
            System.out.println("电压为5v~ 可以充电!");
        }else{
            System.out.println("电压不等于5v~ 不可以充电!");
        }

    }
}

public class Client {
    public static void main(String[] args) {
        System.out.println("对象适配器模式~~~~~~~~~~");
        Phone phone =new Phone();
        phone.charging(new VoltageAdapter(new Voltage220V()));
    }
}

3)对象适配器模式注意事项和细节

  • 对象适配器和类适配器算是一种思想,实现方式不同,用组合来代替继承

  • 使用成本更低,更灵活

5、接口适配器模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值