适配器模式

参考的博客地址来源:https://www.cnblogs.com/mingmingcome/p/9810731.html
具体的说下,我们在适配器模式中主要解决的问题是什么
问题:主要是客户端要求的接口与现有的接口以及类存在着不同的差异,需要通过适配器来解决掉他们之间的差异,完成客户端要求的理想接口
例子:例如mysql中的jdbc连接就是通过适配器模式来解决的,sun公司只是提供一个抽象的接口来允许连接的,而针对jdbc这个抽象开发出来的jdbc驱动软件就是相当于一个适配器角色例如mysql。sqlserver,plsql,oracle等数据库的jdbc连接
再举一个跟生活相贴近的例子就是电源适配器这个产品了,在这里面我们家用的电压是220v,但是手机充电所要求的电压就是5v.所以是需要通过一个电源适配器来对电压做调节的
适配器模式主要是分为三种不同的类型模式:
类适配器模式
对象适配器模式
接口适配器模式-也就是默认的适配器模式-缺省适配器模式
在适配器模式中主要有三个概念可以说下:
目标接口 适配者 适配者角色

下面就是类适配器模式中的电源适配器代码如下:
这下面的代码就是类适配器模式的代码:

/**
 * @Author: Jason
 * @Create: 2019/12/24  11:05
 * @Description 目标接口
 */
public interface TaragetPower {

    //主要的就是输出一个5v的电压接口
    public int  outPut5V();

}

/**
 * @Author: Jason
 * @Create: 2019/12/24  11:07
 * @Description 现有的电压输出类
  适配者接口
 */
public class ExistPower {

    public int  standardPower = 240;

    //现有的输出电压为240v
    public  int  outPut240V(){
        return standardPower;
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/24  11:09
 * @Description 电源适配器
 * 适配器作用
 */
public class AdapterPower extends ExistPower  implements TaragetPower {


    //主要的作用就是将240V转换成5V的电压
    @Override
    public int outPut5V() {
        int currentPower = outPut240V();
        //然后将240v电压转换成5v的电压
        return currentPower/48;
    }

下面的代码就是对象是适配器的代码:
对象适配器相对于类适配器来讲:最主要的区别就是适配器类的写法不同,
如下就是适配器类的代码写法:前面的目标接口以及适配者类都是一样的

/**
 * @Author: Jason
 * @Create: 2019/12/24  11:17
 * @Description 对象适配器模式
 */
public class PowerAdapterObject implements TaragetPower {

    //通过程序员自己新增适配者对象
    private ExistPower existPower;

    //并且输出到5v
    @Override
    public int outPut5V() {
        //获取到当前的电压也就是240v电压
        int currentPower = existPower.outPut240V();
        return currentPower/48;
    }
}

缺省适配器模式:
所谓的缺省适配器模式主要解决的一个问题就是:在目标接口中,无需实现所有的方法,只需要根据自己的业务需求就实现哪些需求方法
这跟适配器模式的宗旨是不相违背的,因为这是过滤了目标接口中的多余方法,这也算是适配器模式中一种吧

/**
 * @Author: Jason
 * @Create: 2019/12/24  11:05
 * @Description 目标接口
 */
public interface TaragetPower {

    //主要的就是输出一个5v的电压接口
    public int  outPut5V();

    //输出1-20的电压数
    public  int  outPut20V();

    //输出20-30的电压数
    public  int  outPut30V();


    //输出30-50V的电压数
    public int  outPut50V();
}


/**
 * @Author: Jason
 * @Create: 2019/12/24  14:20
 * @Description 适配角色-一个抽象类并且实现了目标接口中的方法
 */
public  abstract class PowerRelnize implements TaragetPower{

    @Override
    public int outPut5V() {
        return 0;
    }

    @Override
    public int outPut20V() {
        return 0;
    }

    @Override
    public int outPut30V() {
        return 0;
    }

    @Override
    public int outPut50V() {
        return 0;
    }
}



/**
 * @Author: Jason
 * @Create: 2019/12/24  14:27
 * @Description 测试缺省类所需的类
 具体的应用罢了
 */
public class AdapteeTestObject {

    //实例化目标接口类
    private TaragetPower taragetPower;

    public void  addTargetPower(TaragetPower taragetPower) {
        this.taragetPower = taragetPower;
    }

    public int outPut5V() {
        return taragetPower.outPut5V();
    }

    public int outPut20V() {
        return taragetPower.outPut20V();
    }

    public int outPut30V() {
        return taragetPower.outPut30V();
    }

}


/**
 * @Author: Jason
 * @Create: 2019/12/24  14:32
 * @Description 缺省适配器测试类
 */
public class AdapteeTest {
    public static void main(String[] args) {
        AdapteeTestObject  adapteeTestObject = new AdapteeTestObject();
        adapteeTestObject.addTargetPower(new PowerRelnize(){
            @Override
            public int outPut50V() {
                return 0;
            }
        });
    }
}

总结: 缺省适配器模式中的流程主要的就是:首先开始定义一个目标接口中的诸多方法,然后就是定义一个抽象类实现目标接口中的方法,然后就是定义一个类来测试添加的接口的类,感觉缺省适配器模式就是在对象适配器模式上增加的一点东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值