### 浅析Java设计模式【2】——适配器 #### 概念解析 适配器模式是一种常用的设计模式,其核心在于“适配”二字,即如何将一个类的接口转换成客户希望的另一个接口。该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 在现实生活中,适配器的应用十分广泛。例如,当我们的手机需要充电时,由于民用电力系统提供的交流电为220V,而手机所需的电压却远远低于这一数值,因此我们需要一个手机充电器来完成从220V交流电到适合手机使用的低压直流电之间的转换。这个过程不仅涉及到电压电流的转换,还包括了物理接口的适配。这种情况下,手机充电器就是一个典型的适配器。 #### 适配器模式的角色 适配器模式主要包含以下三个角色: 1. **适配者(Adaptee)**:通常是指已经存在的某个类,拥有客户不熟悉的接口。在本例中,220V的电源插座就扮演了适配者的角色。 2. **适配器(Adapter)**:是适配器模式的核心,它的职责是将适配者的接口转换成目标接口。本例中的手机充电器即为适配器。 3. **目标(Target)**:定义了一个客户类期望使用的公共接口,以便于客户可以统一调用。在充电的例子中,手机所需的特定电压可以被视为目标接口。 #### 适配器模式的分类 适配器模式主要分为三种类型:类适配器模式、对象适配器模式、接口适配器模式。 ##### 类适配器模式 类适配器模式的核心是通过继承来实现适配。这种方式简单直观,但也有局限性,因为它只适用于适配者与被适配者之间存在继承关系的情况。 **代码示例**: ```java @Slf4j public class Adaptee { // 适配者 public int v220() { log.error("标准电压输出"); return 220; } } public interface Target { // 目标 int v220(); int v5(); int v100(); } @Slf4j public class ClazzAdapter extends Adaptee implements Target { // 适配器 @Override public int v5() { int v5 = super.v220() / 44; log.error("电压转换成功{}", v5); return v5; } @Override public int v100() { int v110 = super.v220() / 44; log.error("电压转换成功{}", v110); return v110; } } ``` **测试样例**: ```java @Test public void testClassAdapter() { ClazzAdapter clazzAdapter = new ClazzAdapter(); clazzAdapter.v5(); clazzAdapter.v100(); clazzAdapter.v220(); } ``` ##### 对象适配器模式 对象适配器模式是通过组合来实现适配。这种方式更加灵活,可以适配任意类型的适配者,且易于扩展。 **代码示例**: ```java @Slf4j public class ObjAdapter implements Target { // 适配器 private Adaptee adaptee; public ObjAdapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public int v220() { log.error("对象适配器模式标准电压"); return adaptee.v220(); } @Override public int v5() { int v5 = v220() / 44; log.error("对象适配器模式;电压转换成功{}", v5); return v5; } @Override public int v100() { int v110 = v220() / 2; log.error("对象适配器模式;电压转换成功{}", v110); return v110; } } ``` **测试样例**: ```java @Test public void testObjectAdapter() { Adaptee adaptee = new Adaptee(); ObjAdapter objAdapter = new ObjAdapter(adaptee); objAdapter.v5(); objAdapter.v100(); objAdapter.v220(); } ``` ##### 类适配器与对象适配器的比较 类适配器模式基于继承,这意味着如果适配者发生变化,可能会影响到整个适配器。而对象适配器模式基于组合,更灵活,可以更容易地适应变化,并且能够适配适配者的子类或派生类。 #### 接口适配器模式 接口适配器模式主要用于实现接口中未使用的部分。当一个接口中定义了很多方法,但某些类只需要实现其中的一部分时,可以使用接口适配器模式来减少不必要的方法实现。 **代码示例**: ```java public interface AdapterInterface { int v220(); int v5(); int v100(); String getInfo(); // 假设这是一个不需要实现的方法 } public class DefaultAdapter implements AdapterInterface { @Override public int v220() { // 实现逻辑 return 220; } @Override public int v5() { // 实现逻辑 return 5; } @Override public int v100() { // 实现逻辑 return 100; } @Override public String getInfo() { // 默认实现 return "Default Info"; } } ``` **测试样例**: ```java @Test public void testInterfaceAdapter() { DefaultAdapter adapter = new DefaultAdapter(); System.out.println(adapter.getInfo()); } ``` 通过上述示例,我们可以看到,适配器模式在Java编程中有着广泛的应用场景,无论是对于现有类的接口转换还是新接口的创建,适配器模式都能够提供有效的解决方案。开发者可以根据实际需求选择合适的适配器模式来解决问题,从而提高代码的复用性和灵活性。












- 粉丝: 116
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 六自由度系统集成设计(四)PPT课件.ppt
- 生产库存与项目管理概述.pptx
- Postcat -Typescript资源
- 工业机器人现场编程实训任务测量由机器人引导的工PPT课件.pptx
- 嵌入式系统开发的最佳实践指南
- 无刷直流电机BLDC神经网络PID控制:双闭环控制模型的研究与学习指南
- 我国医院人力资源管理的信息化初探.docx
- 车载卫星通信设备及操作简介.doc
- 最新中职技能大赛Flash动画试题.pdf
- 网络支付安全知识[最终版].pdf
- GoFlyAdmin(Go语言快速开发框架)-Go资源
- 算法设计与应用作业.doc
- 山东推进农业大数据运用实施方案.doc
- TCP-IP协议在vxWorks嵌入式平台上的实现.doc
- 杭州市权力阳光电子政务系统安全技术规范.docx
- 关于铁路应急通信综合传输系统设计探讨论文.doc


