网站改域名如何做百度优化,佛山新网站建设方案,俄罗斯外贸常用网站,泰安平台公司目录 一、 啥是适配器模式#xff1f;二、 为什么要用适配器模式#xff1f;三、 适配器模式的实现方式1. 类适配器模式#xff08;继承插座 #x1f468;#x1f469;#x1f467;#x1f466;#xff09;2. 对象适配器模式#xff08;插座转换器 #x1f50c… 目录 一、 啥是适配器模式二、 为什么要用适配器模式三、 适配器模式的实现方式1. 类适配器模式继承插座 2. 对象适配器模式插座转换器 3. 接口适配器模式万能插座 ️ 四、 三种适配器的对比五、 适配器模式的优缺点六、 适配器模式的应用场景七、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解代理模式请看 (六)趣学设计模式 之 代理模式 这篇文章带你详细认识一下设计模式中的适配器模式
一、 啥是适配器模式
想象一下你买了一个新的电器 但是插头和家里的插座不匹配 怎么办 这时候就需要一个插座转换器 把电器的插头转换成家里的插座可以使用的类型 。
适配器模式就是用来解决接口不兼容的问题 它可以将一个类的接口转换成客户希望的另外一个接口使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 。
简单来说就是把不兼容的接口转换成兼容的接口
你想使用一个类但是它的接口和你需要的接口不一样 就像你想用一个旧的类库但是它的接口和你的代码不兼容 你想让两个接口不兼容的类一起工作 就像你想让一个美国的插头和一个中国的插座一起工作 你想重用一些现有的类但是它们的接口不符合你的要求 就像你想用一个旧的算法但是它的输入输出格式和你的代码不兼容
二、 为什么要用适配器模式
用适配器模式好处多多
提高类的复用性 可以将一些现有的类适配成新的接口方便重用 ♻️提高系统的灵活性 可以动态地选择不同的适配器使得系统更加灵活 符合开闭原则 可以在不修改现有代码的情况下增加新的适配器扩展功能 解耦 将客户端和目标类解耦降低系统的耦合度
三、 适配器模式的实现方式
适配器模式主要分为三种
类适配器模式 通过继承来实现适配就像继承了插座的类 对象适配器模式 通过组合来实现适配就像用一个插座转换器 接口适配器模式 通过实现一个抽象类来实现适配就像万能插座 ️
1. 类适配器模式继承插座
类适配器模式通过继承来实现适配就像继承了插座的类拥有了插座的功能
案例电压适配器经典案例 ⚡
假设你有一个 220V 的电源 但是你需要给一个 5V 的设备充电 怎么办 这时候就需要一个电压适配器把 220V 的电压转换成 5V 的电压 ⚡
代码示例
// 目标接口5V 电压
public interface Voltage5V {int output5V(); // 输出 5V 电压
}// 需要适配的类220V 电压
public class Voltage220V {public int output220V() {int src 220;System.out.println(我是220V电压);return src;}
}// 适配器类电压适配器
public class VoltageAdapter extends Voltage220V implements Voltage5V {Overridepublic int output5V() {// 获取 220V 电压int srcV output220V();// 转换成 5V 电压int dstV srcV / 44;return dstV;}
}// 客户端
public class Client {public static void main(String[] args) {VoltageAdapter adapter new VoltageAdapter(); // 创建适配器对象int voltage adapter.output5V(); // 获取 5V 电压System.out.println(输出电压为 voltage V); // 输出电压}
}分析
Voltage5V 是目标接口客户端需要使用 5V 电压。Voltage220V 是需要适配的类它只能输出 220V 电压。VoltageAdapter 是适配器类它继承了 Voltage220V 类并实现了 Voltage5V 接口将 220V 电压转换成 5V 电压。
输出结果
我是220V电压
输出电压为5V2. 对象适配器模式插座转换器
对象适配器模式通过组合来实现适配就像用一个插座转换器把电器的插头转换成家里的插座可以使用的类型
案例还是电压适配器对象版⚡
还是上面的电压适配器的例子但是这次我们使用对象适配器模式来实现
代码示例
// 目标接口5V 电压
public interface Voltage5V {int output5V(); // 输出 5V 电压
}// 需要适配的类220V 电压
public class Voltage220V {public int output220V() {int src 220;System.out.println(我是220V电压);return src;}
}// 适配器类电压适配器
public class VoltageAdapter implements Voltage5V {private Voltage220V voltage220V; // 组合 220V 电压对象public VoltageAdapter(Voltage220V voltage220V) {this.voltage220V voltage220V;}Overridepublic int output5V() {// 获取 220V 电压int srcV voltage220V.output220V();// 转换成 5V 电压int dstV srcV / 44;return dstV;}
}// 客户端
public class Client {public static void main(String[] args) {Voltage220V voltage220V new Voltage220V(); // 创建 220V 电压对象VoltageAdapter adapter new VoltageAdapter(voltage220V); // 创建适配器对象int voltage adapter.output5V(); // 获取 5V 电压System.out.println(输出电压为 voltage V); // 输出电压}
}分析
Voltage5V 是目标接口客户端需要使用 5V 电压。Voltage220V 是需要适配的类它只能输出 220V 电压。VoltageAdapter 是适配器类它组合了 Voltage220V 类并实现了 Voltage5V 接口将 220V 电压转换成 5V 电压。
输出结果
我是220V电压
输出电压为5V3. 接口适配器模式万能插座 ️
接口适配器模式通过实现一个抽象类来实现适配就像万能插座可以兼容各种类型的插头 ️
案例USB 接口适配器万能接口
假设你有一个 USB 设备 但是你的电脑只有 Type-C 接口 怎么办 这时候就需要一个 USB 接口适配器把 USB 接口转换成 Type-C 接口
代码示例
// 目标接口USB 接口
public interface Usb {void read(); // 读取数据void write(); // 写入数据void connect(); // 连接设备void disconnect(); // 断开连接
}// 抽象适配器类USB 适配器
public abstract class UsbAdapter implements Usb {Overridepublic void read() {// 默认实现可以不实现}Overridepublic void write() {// 默认实现可以不实现}Overridepublic void connect() {// 默认实现可以不实现}Overridepublic void disconnect() {// 默认实现可以不实现}
}// 需要适配的类Type-C 设备
public class TypeCDevice extends UsbAdapter {Overridepublic void read() {System.out.println(Type-C 设备读取数据);}Overridepublic void write() {System.out.println(Type-C 设备写入数据);}
}// 客户端
public class Client {public static void main(String[] args) {TypeCDevice typeCDevice new TypeCDevice(); // 创建 Type-C 设备对象typeCDevice.connect(); // 连接设备typeCDevice.read(); // 读取数据typeCDevice.write(); // 写入数据typeCDevice.disconnect(); // 断开连接}
}分析
Usb 是目标接口客户端需要使用 USB 接口。UsbAdapter 是抽象适配器类它实现了 Usb 接口但是提供了默认实现子类可以选择性地实现需要的方法。TypeCDevice 是需要适配的类它继承了 UsbAdapter 类并实现了 read 和 write 方法实现了 USB 接口的功能。
输出结果
Type-C 设备读取数据
Type-C 设备写入数据四、 三种适配器的对比
特性类适配器模式对象适配器模式接口适配器模式实现方式继承组合抽象类优点简单易用灵活可以适配多个类可以选择性地实现接口方法缺点只能适配一个类耦合度较高需要持有目标类的对象增加了对象的数量需要定义抽象类增加了类的数量适用场景目标类接口比较稳定不需要经常修改需要适配多个类或者目标类接口经常修改只需要使用接口中的部分方法
五、 适配器模式的优缺点
优点
提高类的复用性 ♻️提高系统的灵活性 符合开闭原则 解耦
缺点
增加了系统的复杂度 可能会降低性能
六、 适配器模式的应用场景
接口转换 将一个类的接口转换成客户希望的另外一个接口 数据转换 将一种格式的数据转换成另外一种格式的数据 ️遗留系统集成 将新的系统和旧的系统集成在一起 第三方库集成 将第三方库集成到你的项目中
七、 总结
适配器模式就像插座转换器让不兼容的接口也能愉快玩耍 主要分为类适配器模式、对象适配器模式和接口适配器模式三种 优点是提高类的复用性、提高系统的灵活性、符合开闭原则、解耦 缺点是增加复杂度、可能降低性能 适用于需要解决接口不兼容的问题的场景
希望这篇文章能让你彻底理解适配器模式 祝你学习愉快 看完请看(八)趣学设计模式 之 装饰器模式