您的位置:首页 > 其它

设计模式之适配器模式

2020-06-04 04:25 78 查看

适配器模式

/**
* 适配器,解决USB到Lighting不兼容的问题
*/
/**
* 适配器设计模式:
*      适配器,其实是一个中间件,主要用来解决“接口不兼容”的问题而存在的。
*      当我们需要使用到某一个功能模块的时候,发现一个已经存在的模块和现有的模块之间不兼容。没有办法直接使用。
*      此时,可以做一个适配器,使用之前的不兼容的模块中的功能。
*
* 案例:
*      U盘、键盘、鼠标,可以直接通过USB接口连接到电脑上。手机是不能直接通过USB接口连接到电脑。
*      如果想要把手机连接到电脑上,需要有一个转换器。这个转换器要求同时可以连接到电脑和手机。
*      这个转换器,就是一个适配器,解决了接口不兼容的设备之间进行数据传递。
*/
public class Program {
public static void main(String[] args) {
// 需求:将U盘和手机都连接到电脑上,电脑输出每一个USB端口连接的设备信息
Computer computer = new Computer();
UDisk uDisk = new UDisk();
Phone phone = new Phone();
// 设备连接
computer.usb1 = uDisk;
computer.usb2 = new Adapter(phone);

// 输出电脑连接的设备信息
computer.showUSBDeviceInfo();
}
}
public class Adapter implements USB {
// 设计一个另外一端,需要去适配的接口的引用
private Lighting lightingDevice;

public Adapter(Lighting lightingDevice) {
this.lightingDevice = lightingDevice;
}

@Override
public String getDeviceInfo() {
return lightingDevice.getDeviceInfo();
}
}
public class Computer {
// 两个USB端口,可以连接USB设备
public USB usb1;
public USB usb2;

public void showUSBDeviceInfo() {
System.out.println("USB1端口连接了: " + usb1.getDeviceInfo());
System.out.println("USB2端口连接了: " + usb2.getDeviceInfo());
}
}
public interface Lighting {
/**
* 获取Lighting设备的信息
* @return 设备信息
*/
String getDeviceInfo();
}
public class Phone implements Lighting {
@Override
public String getDeviceInfo() {
return "iPhone 11 Pro Max";
}
}
public class UDisk implements USB {
@Override
public String getDeviceInfo() {
return "KINSTON 256G";
}
}
public interface USB {
/**
* 获取USB设备的信息
* @return 设备信息
*/
String getDeviceInfo();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: