这一篇写的是适配器模式,适配器的出现目的是为了对不同的接口做出不同的功能,比如:生活中最常用就是充电头,有Type-C的,有苹果的,有安卓的... 适配器的作用就是作为一个转换器,目的就是为了给手机充电,从而对接口进行了一系列的转换。
看百度上对适配器的概念:
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
接下来,用我们生活中的场景来进行模拟一下适配器的应用:
对于手机充电器,具备一个功能,那就是充电,这里我抽象出一个接口:
package com.example.demo.core.design.adapter;
/**
* @author ChoviWu
* Description : 充电接口
*/
public interface Charge {
/**
* 充电
*/
void charge();
}
那么什么样的东西具备充电的功能呢?答案是TypeC...等等,这里我做了一个子类的实现:
package com.example.demo.core.design.adapter;
/**
* @author ChoviWu
* Description : typeC 充电
*/
public class TypeC implements Charge {
@Override
public void charge() {
System.out.println("PS1");
}
}
public class Android implements Charge {
@Override
public void charge() {
System.out.println("PS2");
}
}
public class IOS implements Charge {
@Override
public void charge() {
System.out.println("PS2");
}
}
那么,如果说,我目前手机是安卓手机,但是我这里有一个TypeC的充电器怎么办? 这里就引入了适配器,用来对安卓手机和TypeC充电器做一个桥接,用代码 表示则如下:
package com.example.demo.core.design.adapter;
/**
* @author ChoviWu
* Description :
*/
public class TypeCAdapter {
/**
* 这里传入一个TypeC充电器参数 作为适配
*/
private Charge typeC;
public TypeCAdapter(Charge typeC){
this.typeC = typeC;
}
/**
* 实际调用的方法
*/
public void recharge(){
typeC.charge();
}
}
这里内部构造一个属性,作为适配参数,后面实际调用的对象即适配的对象
public class Test {
public static void main(String[] args) {
TypeCAdapter adapter = new TypeCAdapter(new Android());
adapter.recharge();
}
}
这里的参数传入不同的,即不同的充电器,最后的目的就是充电。这里也是实现了多态的思想,对不同的适配器有不同的调用逻辑
用适配器的好处:不需要改变原实现的逻辑,能适配出所需要的对象,最终能够达到目标成果,但需要适配的对象都需要实现共同的接口,同时也可以降低耦合度