一、前言
今天我们来一起学习结构型模式中的适配器模式,适配器模式在我们的生活场景中会经常遇到,比如说各种设备的转换接口。其实,我们从适配器这个模式的名字就能很容易想到,这种设计模式的存在就是为了让原本不兼容的接口变得兼容,因为这样做可以省去了很多开销成本。
二、适配器模式
适配器模式的原理:将一个类的接口转换成客户需要的接口,使得原本因接口不兼容不能一起工作的类可以一起工作。它的适用场景有如下:
1、当你想使用一个类的接口,但是它的接口不兼容。
2、你想创建一个类可以与那些不可预见的类协同工作。
适配器模式在我们的项目中应该说可以经常遇见,而且实现原理也很简单,所以基本上也没有什么可以详细讲的东西,不过能我们自身在开发的过程中,如果有遇到相似的场景,我们不妨可以自己创建一个适配器哟!
三、代码展示
在代码展示中我们还是举一个插座的例子吧,因为不同的国家的电器标准不一样,所以生产出来的插头也不一样,那当在异国出差或者旅游时,我们自身的设备插头在不匹配别的国家的插口的情况下,就需要一个叫做插头适配器的东西。
两个接口:插头和插口
/**
* 插头接口
* @author Deng
*
*/
public interface Plug {
/**
* 抽象一个充电行为
*/
public void Charge();
}
/**
* 插口接口
* @author Deng
*
*/
public interface Socket {
/**
* 抽象一个连接插头的行为
*/
public void Connect();
}
四个实现类:中国标准的插头和插口,欧盟标准的插头和插口
public class ChinaPlug implements Plug{
@Override
public void Charge() {
// TODO Auto-generated method stub
System.out.println("中国标准的插头");
}
}
public class ChinaSocket implements Socket{
@Override
public void Connect() {
// TODO Auto-generated method stub
System.out.println("中国标准的插口");
}
}
public class UKPlug implements Plug{
@Override
public void Charge() {
// TODO Auto-generated method stub
System.out.println("欧盟标准的 插头");
}
}
public class UKSocket implements Socket{
@Override
public void Connect() {
// TODO Auto-generated method stub
System.out.println("欧盟标准的电源插口");
}
}
适配器,适配中国的插口和欧盟的插头
public class PlugAdapter implements Plug,Socket{
private ChinaPlug chinaPlug;
private UKSocket ukSocket;
public PlugAdapter(ChinaPlug chinaPlug, UKSocket ukSocket) {
super();
this.chinaPlug = chinaPlug;
this.ukSocket = ukSocket;
}
/**
* 用作与欧盟的插口连接
*/
@Override
public void Connect() {
// TODO Auto-generated method stub
ChinaSocket chinaSocket = new ChinaSocket();
chinaPlug.Charge();
System.out.println("连接");
System.out.println("===============");
chinaSocket.Connect();
}
/**
* 用作与中国的插头连接
*/
@Override
public void Charge() {
// TODO Auto-generated method stub
UKPlug ukPlug = new UKPlug();
ukPlug.Charge();
System.out.println("===============");
System.out.println("连接");
ukSocket.Connect();
}
}
结果输出:中间部分为适配器的内部作用,这样就是的两个接口相互兼容。
中国标准的插头
连接
===============
中国标准的插口
欧盟标准的 插头
===============
连接
欧盟标准的电源插口