设计模式详解:适配器模式(Adapter Pattern)
创作时间:
作者:
@小白创作中心
设计模式详解:适配器模式(Adapter Pattern)
引用
CSDN
1.
https://blog.csdn.net/weixin_60653563/article/details/141882802
适配器模式是软件设计模式中的一种结构型模式,主要用于解决接口不兼容的问题。通过创建一个适配器类,可以将不兼容的接口连接起来,使得原本无法一起工作的类可以协同工作。本文将详细介绍适配器模式的概念、优点、缺点、组成部分、使用场景,并通过具体的代码示例帮助读者更好地理解这一模式。
概念
适配器模式(Adapter Pattern)是一种结构型设计模式。适配器模式通过创建一个适配器类,将原本不兼容的接口连接起来,使得原本无法一起工作的类可以协同工作。适配器模式通常用于将现有的类与新的系统或功能进行集成。
优点
- 提高了类的复用性:通过适配器,可以重用现有的类,而无需修改其代码。
- 解耦合:客户端与具体实现解耦,使得系统更灵活。
- 易于扩展:可以通过添加新的适配器来支持新的接口,而不影响现有代码。
缺点
- 增加了复杂性:适配器模式可能会引入额外的类和对象,增加系统的复杂性。
- 性能开销:适配器可能会引入额外的调用层,影响性能。
组成部分
- 目标接口(Target) :客户端所期望的接口。
- 源类(Adaptee) :需要适配的类,拥有不兼容的接口。
- 适配器(Adapter) :实现目标接口,并持有源类的实例,将源类的方法转换为目标接口的方法。
使用场景
- 已有类的接口不符合需求 :当需要使用的类的接口与当前系统不兼容时。
- 多种接口的统一 :将多个不同的接口统一成一个接口,提供给客户端使用。
- 第三方库的集成 :在集成第三方库时,适配器可以将其接口转换为应用程序的接口。
代码举例
6.1 对象适配器
目标接口
public interface Target {
void request();
}
源类
public class Adaptee {
public void specificRequest() {
System.out.println("Specific request from Adaptee.");
}
}
适配器类
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest(); // 调用源类的方法
}
}
客户端代码
public class ObjectAdapterClient {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.request(); // 输出: Specific request from Adaptee.
}
}
6.2 类适配器
目标接口
public interface Target {
void request();
}
源类
public class Adaptee {
public void specificRequest() {
System.out.println("Specific request from Adaptee.");
}
}
适配器类(类适配器)
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
specificRequest(); // 直接调用源类的方法
}
}
客户端代码
public class ClassAdapterClient {
public static void main(String[] args) {
Target target = new Adapter();
target.request(); // 输出: Specific request from Adaptee.
}
}
6.3 接口适配器
接口
public interface Interface {
void method1();
void method2();
void method3();
}
适配器类
public class Adapter implements Interface {
@Override
public void method1() {
// 默认实现,留空
}
@Override
public void method2() {
// 默认实现,留空
}
@Override
public void method3() {
// 默认实现,留空
}
}
具体实现类
public class ConcreteClass extends Adapter {
@Override
public void method1() {
System.out.println("Method1 implementation.");
}
// method2 和 method3 使用默认实现
}
客户端代码
public class InterfaceAdapterClient {
public static void main(String[] args) {
Interface obj = new ConcreteClass();
obj.method1(); // 输出: Method1 implementation.
obj.method2(); // 不输出任何内容,因为使用了默认实现
}
}
总结
- 对象适配器 :通过持有源类的实例实现目标接口,适合在运行时动态绑定。
- 类适配器 :通过继承源类实现目标接口,适合在编译时确定适配关系。
- 接口适配器 :允许实现接口的一部分方法,适合接口方法较多且只需要实现部分方法的情况。
适配器模式是解决接口不兼容问题的有效工具,能够提高代码的复用性和灵活性。尽管它可能增加系统的复杂性,但在许多场景中,它提供了一种优雅的解决方案,使得不同接口之间能够顺利协作。在设计系统时,合理使用适配器模式可以显著提升系统的可维护性和扩展性。
热门推荐
《叫我大掌柜》零氪攻略之如何提升赚速
如何预防脂肪肝?脂肪肝患者的饮食建议?脂肪肝患者可以吃巧克力吗?
兴平UPS不间断电源怎么连接?
菲律宾宿务岛最佳旅游季节及注意事项
数学公式可视化技术
《清明上河图密码》古装悬疑剧“天花板”,这些“配角”堪称一绝
卫生间下水道被水泥堵了怎么办?四种实用疏通方法
10款——最常用的3D打印金属材料
春季种番茄,怎么种出草莓番茄、铁皮番茄,是不是水肥越少越好?
动起来、健康来!请收好这份“春节力量训练指南”
彼得林奇PEG价值选股策略:原理、回测与应用
米饭的正确打开方式:从选米到焖饭的完整攻略
顺风车怎样顺利接到拼车订单?这种接单方式有哪些技巧?
探访全球首座第四代核电站:不会熔毁的核反应堆
秋冬智能马桶使用率上升,这份使用注意事项请查收
追寻匈奴的足迹:从古至今的民族融合
做了N年眼保健操还是近视了,原因竟然是……
海为PLC/HMI/云/手机APP在现代水产农业养殖上的应用
复旦教授评国产光刻机:虽落后20年,但自主可控优势明显
智慧农业再上新丨南果北种 茄子上树——北大荒打造农业“黑科技”
上海机场联络线最新消息:票价机制公布,年底即将开通
大六壬的断课思路与步骤
【人文山水·时光峰峦】探索世界自然遗产施秉云台山,体验自然与文化的双重秘境
时间与空间的奥秘:从亚里士多德到量子力学的探索之旅
技术革新:企业降本增效的关键突破点
人死前一天最怕什么
日本学校女生 “光腿” 奇观:寒潮来袭,为啥校规仍禁止穿裤袜?
蜀锦织造技艺:国家级非物质文化遗产
守护青少年的心理健康,这些知识要知道!
跨越障碍:提升小学英语成绩的实用策略