适配器模式
适配器模式说的是,可以把一个类的接口转化成客户所期待的另一个接口,使得本来因为接口不匹配的两个类可以在一起工作。
适配器模式的用途
举例:最新版的iphone Xs大陆比较贵,而港版较便宜点,但是呢买了港版的iPhone充电器(需求方Target)在大陆又不能直接充电,这时候需要加一个充电器转换器(Adapter),来做中间转换工作。中间的这个转换器相当于适配器,来适配大陆220v的电流。
适配器分类
适配器分为类适配器和对象适配器。
类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同。
对象适配器模式中适配器和适配者之间是关联关系,
类适配器模式中适配器和适配者是继承关系。
需求背景
项目需要我,将3d模型数据存储在mongodb和couchdb两个数据库中,程序调用接口一样,用户自己选择调用那个数据库中的数据。
背景介绍完毕
为了代码的保密,小demo做一个类似的功能。(思想都类似,就是我想让代码实现用户自己选择存储的数据库)
1、创建接口
package springboot_adaptor.demo.Port;
/**
* @ProjectName springboot_adaptor
* @Author Z.CR
* @Date 2019/2/18 11:47
* @Version 1.0
*/
public interface Port {
public void SSH();
public void NET();
public void Tomcat();
public void Mysql();
public void Oracle();
public void FTP();
}
2、伪实现接口(定义抽象类实现端口接口,但是什么事情都不做)
package springboot_adaptor.demo.Port;
/**
* @ProjectName springboot_adaptor
* @Author Z.CR
* @Date 2019/2/18 11:52
* @Description:
* @Version 1.0
*/
public abstract class PortImpl implements Port {
@Override
public void SSH(){};
@Override
public void NET(){};
@Override
public void Tomcat(){};
@Override
public void Mysql(){};
@Override
public void Oracle(){};
@Override
public void FTP() {
};
}
3、覆写伪接口实现一种功能
package springboot_adaptor.demo.Port;
/**
* @ProjectName springboot_adaptor
* @Author Z.CR
* @Date 2019/2/18 11:57
* @Description:
* @Version 1.0
*/
public class Chat extends PortImpl{
@Override
public void NET(){ System.out.println("Hello world!");};
@Override
public void FTP(){ System.out.println("File upload succeddful!");};
@Override
public void Oracle(){
System.out.println("Oracle is running!");
}
}
实现另一个功能
package springboot_adaptor.demo.Port;
/**
* @ProjectName springboot_adaptor
* @Author Z.CR
* @Date 2019/2/18 11:59
* @Description:
* @Version 1.0
*/
public class Server extends PortImpl {
@Override
public void SSH(){ System.out.println("Connect success!"); };
@Override
public void NET(){ System.out.println("Hello WWW!"); };
@Override
public void Tomcat(){ System.out.println("Tomcat 9 is running!"); };
@Override
public void Mysql(){ System.out.println("Mysql is running!"); };
}
4、运行服务
package springboot_adaptor.demo.Port;
/**
* @ProjectName springboot_adaptor
* @Author Z.CR
* @Date 2019/2/18 11:59
* @Description:
* @Version 1.0
*/
public class Start {
private static Port chatPort = new Chat();
private static Port serverPort = new Server();
public static void main(String[] args) {
System.out.println("-----------chatPort-----------------");
chatPort.NET();
chatPort.FTP();
chatPort.Oracle();
System.out.println("----------serverPort----------------");
serverPort.NET();
serverPort.SSH();
serverPort.Tomcat();
serverPort.Mysql();
}
}
5、运行结果
Hello world!
File upload succeddful!
Oracle is running!
----------serverPort----------------
Hello WWW!
Connect success!
Tomcat 9 is running!
Mysql is running!