1、简介
适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
2、适配器模式分类
-
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
-
需要适配的类(Adaptee):需要适配的类或适配者类。
-
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
3、代码展现-类适配器(通过继承方式实现)
场景:我电脑需要上网,但是只有网线不行得,但是需要usb插口才可以上网
网线类,能够实现上网,但是没有接口适配器
/**
* @Author charles.yao
* @Description 网线(能够上网-需要转化成usb)
* @Date 2023/3/7 19:36
*/
public class NetWorkLine {
/**
* 能够上网
*/
public void requestNet() {
System.out.println("我是网线能够上网");
}
}
转换接口&&适配器
/**
* 网线转换成usb
*/
public interface INetWorkToUsb {
/**
* 将网线转换成usb
*/
void convertToRequestNet();
}
/**
* @Author charles.yao
* @Description 网络适配器()
* @Date 2023/3/7 19:40
*/
public class NetAdapter extends NetWorkLine implements INetWorkToUsb{
@Override
public void convertToRequestNet() {
//TODO 业务处理在进行转化
super.requestNet();
}
}
电脑通过适配器才能上网
/**
* @Author charles.yao
* @Description 电脑上网
* @Date 2023/3/7 19:44
*/
public class ComputerOnLine {
/**
* 电脑上网-插入适配器进行转换才能上网
* @param adapter
*/
public void online(INetWorkToUsb adapter){
adapter.convertToRequestNet();
}
}
测试类
/**
* @Author charles.yao
* @Description 适配器测试类
* @Date 2023/3/7 19:45
*/
public class AdapterTest {
public static void main(String[] args) {
ComputerOnLine computerOnLine = new ComputerOnLine();
INetWorkToUsb netAdapter = new NetAdapter();
computerOnLine.online(netAdapter);
}
}
4、通过类适配器方式实现
/**
* @Author charles.yao
* @Description 对象适配器-取消继承方式,使用构造方式一样可以
* @Date 2023/3/7 19:52
*/
public class NetAdapter1 implements INetWorkToUsb{
private NetWorkLine netWorkLine;
public NetAdapter1(NetWorkLine netWorkLine) {
this.netWorkLine = netWorkLine;
}
@Override
public void convertToRequestNet() {
netWorkLine.requestNet();
}
}
测试类
/**
* @Author charles.yao
* @Description 适配器测试类
* @Date 2023/3/7 19:45
*/
public class AdapterTest2 {
public static void main(String[] args) {
ComputerOnLine computerOnLine = new ComputerOnLine();
INetWorkToUsb netAdapter = new NetAdapter1(new NetWorkLine());
computerOnLine.online(netAdapter);
}
}