设计模式 适配器模式

news/2024/9/23 22:35:58/

适配器模式

适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

适配器模式的结构

适配器模式通常涉及以下几个角色:

  • 目标(Target):
    定义客户端所期望的接口。
  • 适配者(Adaptee):
    定义一个已经存在的接口,需要适配这个接口以便与目标接口兼容。
  • 适配器(Adapter):
    适配器类通过继承或组合的方式持有适配者的引用,并将适配者的接口转换为目标接口。

适配器模式的类型

适配器模式有两种主要类型:

适配器模式:

适配器类通过继承适配者类和目标接口来实现。
期望实现接口, 我们 用 mobilePhone 来表示期望实现的接口信息

package AdapterModel;public interface Target {public String mobilePhone(String model);}

原有接口 实体信息, 现在这个 不适用于最新的信息, 最初这个接口只支持信息是 xiaomi2

java">package AdapterModel;public class mobileAdaptee {public String model(){return "xiaomi2";}
}

我们通过 实现我们期望的接口 并 继承原有的 接口信息 并 重新 处理,现在支持新款 xiaomi6

java">package AdapterModel;public class modelAdapter extends mobileAdaptee implements  Target{@Overridepublic String mobilePhone(String num) {String model = model();if("xiaomi".equals(num)){return model;}return "xiaomi6";}
}

信息 展现

java">package AdapterModel;public class Main {public static void main(String[] args) {Target target = new modelAdapter();String s = target.mobilePhone("xiaomi");System.out.println(s);String s1 = target.mobilePhone(null);System.out.println(s1);}
}

适配器类 Adapter 继承了 Adaptee 类,并实现了 Target 接口。
适配器类可以直接访问适配者类的所有方法。

对象适配器模式:

适配器类通过组合适配者对象来实现。
还是上面那个类, 现在在适配器里通过实现对象时同步创建

package AdapterModel;public class mobile1Adapter implements Target{private mobileAdaptee mobileAdaptee;public mobile1Adapter(mobileAdaptee mobileAdaptee){this.mobileAdaptee = mobileAdaptee;}@Overridepublic String mobilePhone(String model) {if("xiaomi".equals(model)){return mobileAdaptee.model();}return "xiaomi6";}
}

通过适配器组合实例对象,在实现对他的接口更新适配 实现跟上面效果一样

    package AdapterModel;public class Main {public static void main(String[] args) {
//            Target target = new modelAdapter();
//            String s = target.mobilePhone("xiaomi");
//            System.out.println(s);
//            String s1 = target.mobilePhone(null);
//            System.out.println(s1);Target target =new mobile1Adapter(new mobileAdaptee());String s = target.mobilePhone("xiaomi");System.out.println(s);String s1 = target.mobilePhone(null);System.out.println(s1);}}

适配器类 Adapter 实现了 Target 接口,并持有 Adaptee 类的一个实例。
适配器类通过组合适配者对象来实现适配。

适配器模式可以让你轻松地在现有系统中集成新组件,而无需修改现有代码。这有助于提高系统的灵活性和可维护性。


http://www.ppmy.cn/news/1512306.html

相关文章

Elasticsearch8.15 springboot配置类简单解释

Elasticsearch8.15 springboot配置类简单解释 0、配置类代码 Configuration public class ElasticsearchConfig {// 从配置文件中读取 Elasticsearch 服务器的 URLValue("${spring.elasticsearch.rest.uris}")private String serverUrl;// 从配置文件中读取用户名V…

http重要的状态码【精简版】

在 Web 开发中,HTTP 状态码用于表示服务器对客户端请求的响应。以下是一些常见且重要的 HTTP 状态码: 也可以参考: http状态码详解【详细版】 1xx: 信息响应 100 Continue:客户端应继续其请求。101 Switching Protocols:服务器…

Spring Boot整合Quartz框架

说明:Quartz是一个定时器框架,可以实现定时任务,本文介绍如何在Spring Boot项目中整合Quartz框架,Quartz介绍参看下面这篇文章: 【Quartz】Quartz定时任务框架 创建Demo 首先,创建一个Spring Boot项目&a…

open Euler22.03系统安装宝塔面板

环境:华为云open Euler22.03操作系统 配置:2核4G 1、安装宝塔面板。 登录弹性云服务器。 执行以下命令,下载并安装宝塔面板。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &&…

Linux date命令

概述 date 命令用于显示或设置系统的时间与日期,语法格式为:“date [指定的格式]”。用户只需在强大的 date 命令后输入以“”号开头的参数,即可按照指定格式来输出系统的时间或日期。 [rootlocalroot ~]# uname -a #当前系统 Linux…

Qt五大核心特性之信号与槽

前言 Qt 引入信号与槽(Signal & Slot)机制的主要原因是为了提供一种灵活、松耦合的方式,使对象之间能够进行安全、方便的通信,尤其在事件驱动的编程环境中(如 GUI 应用)特别有效。 松耦合&#xff1a…

spring boot(学习笔记第十八课)

spring boot(学习笔记第十八课) Spring boot的定时任务和Quartz 学习内容&#xff1a; Spring boot的定时任务Spring boot的Quartz 1. Spring boot的定时任务 定义定时任务 加入必要的依赖 <dependency><groupId>org.springframework.boot</groupId&g…

去中心化的新时代:Web3技术的全球影响

随着技术的不断演进&#xff0c;Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2&#xff0c;Web3通过去中心化、区块链和智能合约等技术&#xff0c;正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度&#xff0c;也对全球经济、社会和文化产生了深…