设计模式-适配器模式

啥玩意叫适配器模式呢

当家庭电压220v太大不适合 手机或者电脑充电的时候,手机充电器和 电脑充电器就必须要 把 220v电压 转换成 自己能用的电压,那么这里手机充电器和电脑充电器就相当于一个电压的适配器,如下如
在这里插入图片描述

适配器模式 - 对象适配器

public class ObjectAdapater {


    public static void main(String[] args) {

        Voltage220V v = new Voltage220V();
        IAdapater adapater5v = new PhoneV( v);
        adapater5v.outputV();

        IAdapater adapater20v = new ComputerV( v);
        adapater20v.outputV();
    }
}

/**
 * 家庭电压220v
 */
class Voltage220V{

    int output220V(){
        return 220;
    }
}

interface  IAdapater{
    /**
     * 输出5v
     * @return
     */
    int outputV();
}


//电脑电压5v
class ComputerV implements IAdapater{

    Voltage220V voltage220V;


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

    @Override
    public int outputV() {

        int v= voltage220V.output220V();
        //......一些列转换得到5
        System.out.println(String.format("家庭 电压 %d ->  电脑电压 %d " ,v,trans(v)));
        return 5;
    }

    private int  trans(int v){
        System.out.println(v + " v电压 经过一些列转换操作.......");
        return 5;
    }
}


/**
 * 手机充电电压 6V
 */
class PhoneV implements IAdapater{

    Voltage220V voltage220V;


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

    @Override
    public int outputV() {

        int v= voltage220V.output220V();
        //......一些列转换得到5
        System.out.println(String.format("家庭 电压 %d ->  手机充电电压 %d " ,v,trans(v)));
        return v;
    }

    private int  trans(int v){
        System.out.println(v + " v电压 经过一些列转换操作.......");
        return 6;
    }
}

适配器模式 - 类适配器

public class ClassAdapater {

    public static void main(String[] args) {


        IAdapatee adapater5v = new ComputerV();
        adapater5v.outputV();

        IAdapatee adapater20v = new PhoneV();
        adapater20v.outputV();
    }
}

interface  IAdapatee{
    /**
     * 输出5v
     * @return
     */
    int outputV();
}


/**
 * 家庭电压220v
 */
class Voltagee220V{

    int output220V(){
        return 220;
    }
}

//电脑电压5v
class ComputerV   extends  Voltagee220V implements IAdapatee{



    @Override
    public int outputV() {

        int v= output220V();
        //......一些列转换得到5
        System.out.println(String.format("家庭 电压 %d ->  电脑电压 %d " ,v,trans(v)));
        return v;
    }

    private int  trans(int v){
        System.out.println(v + " v电压 经过一些列转换.......");
        return 5;
    }
}


/**
 * 手机电压电压
 */
class PhoneV   extends  Voltagee220V implements IAdapatee{


    @Override
    public int outputV() {

        int v= output220V();
        //......一些列转换得到5
        System.out.println(String.format("家庭 电压 %d ->  手机电压 %d " ,v,trans(v)));
        return v;
    }

    private int  trans(int v){
        System.out.println(v + " v电压 经过一些列转换.......");
        return 6;
    }
}

这两种适配器都会输出:
220 v电压 经过一些列转换…
家庭 电压 220 -> 电脑电压 5
220 v电压 经过一些列转换…
家庭 电压 220 -> 手机电压 6

类适配器 和 对象适配器有什么 区别呢?

在这里插入图片描述
我们可以看到 ,类适配器中,因为都继承了 Voltagee220V ,所以手机适配器和 电脑适配器都可以访问家庭电压的 220v,事实上,这是不太好的,但是对象适配器就不会出现这种问题

Spring 源码上体现 适配器模式的地方

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值