当前位置: 首页 > news >正文

java 实现适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成另一个类的接口,使得原本不兼容的类可以协同工作。适配器模式包括两种类型:类适配器和对象适配器。下面分别介绍这两种类型的实现方式。

类适配器模式

类适配器模式使用继承来实现适配器。在这种模式下,适配器类继承了需要适配的类,并实现了目标接口。以下是一个示例:

首先,定义目标接口 Target

public interface Target {void request();
}

然后,定义需要适配的类 Adaptee

public class Adaptee {public void specificRequest() {System.out.println("Adaptee's specific request");}
}

接下来,创建一个适配器类 ClassAdapter,它继承了 Adaptee 类并实现了 Target 接口:

public class ClassAdapter extends Adaptee implements Target {@Overridepublic void request() {specificRequest(); // 调用Adaptee的方法}
}

现在,我们可以使用 ClassAdapter 类来将 Adaptee 类的接口转换成 Target 接口:

public class AdapterPatternDemo {public static void main(String[] args) {Target target = new ClassAdapter();target.request(); // 调用Target接口的方法}
}

对象适配器模式

对象适配器模式使用组合来实现适配器。在这种模式下,适配器类持有一个需要适配的对象,并实现了目标接口。以下是一个示例:

首先,定义目标接口 Target(与类适配器中相同):

public interface Target {void request();
}

然后,定义需要适配的类 Adaptee(与类适配器中相同):

public class Adaptee {public void specificRequest() {System.out.println("Adaptee's specific request");}
}

接下来,创建一个适配器类 ObjectAdapter,它持有一个 Adaptee 对象并实现了 Target 接口:

public class ObjectAdapter implements Target {private Adaptee adaptee;public ObjectAdapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest(); // 调用Adaptee的方法}
}

现在,我们可以使用 ObjectAdapter 类来将 Adaptee 类的接口转换成 Target 接口:

public class AdapterPatternDemo {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new ObjectAdapter(adaptee);target.request(); // 调用Target接口的方法}
}

无论是类适配器还是对象适配器,适配器模式都允许我们在不修改现有类的情况下实现接口的适配,以满足系统的需求。选择哪种模式取决于项目需求和设计偏好。

http://www.lryc.cn/news/161763.html

相关文章:

  • 后端常用的Linux命令大全
  • C++面向对象
  • 什么是栈顶缓存技术
  • TDesign的input标签
  • 从零开始学习 Java:简单易懂的入门指南之Map集合(二十三)
  • SpringBoot 拦截org.thymeleaf.exceptions.TemplateInputException异常
  • Qt之随机数
  • UWB学习——day2
  • 使用 multiprocessing 多进程处理批量数据
  • React 与 TS 结合使用时组件传参总结
  • 性能炸裂c++20协程+iocp/epoll,超轻量高性能异步库开发实战
  • 自定义Dynamics 365实施和发布业务解决方案 - 4. 自动化业务流程
  • Lua03——开发环境搭建
  • Redis 非关系型数据库 配置与优化
  • docker笔记8:Docker网络
  • C# 共享项目的应用
  • Linux之基于HTTPS的静态网站
  • ChatGPT在机器人护理和老年人支持中的潜在角色如何?
  • LeetCode:261. 以图判树 - Python
  • Linux目录结构和远程使用
  • 淘宝销量展示方式变更背后的逻辑
  • Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议
  • 杭州高职画室哪家好?如何选择高职画室?高职美术学习选哪家画室?
  • 原型模式简介
  • SpringMVC(一)
  • 树的基本概念和存储结构
  • 深圳企业制作宣传片群体定位的重要性
  • 2309亚当arsd的11.1版本
  • spring---第七篇
  • 编程要搞明白的东西(二)