《Java极简设计模式》第06章:适配器模式(Adapter)

news2024/10/7 2:46:58

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.gitcode.host
文章汇总:https://binghe.gitcode.host/md/all/all.html
源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-adapter

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍适配器模式最核心的知识,理解适配器模式的设计精髓,并能够灵活运用到实际项目中,编写可维护的代码。

大家好,我是冰河~~

今天给大家介绍《Java极简设计模式》的第06章,适配器模式(Adapter),用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。

一、概述

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

二、适用性

1.你想使用一个已经存在的类,而它的接口不符合你的需求。

2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口 可能不一定兼容的类)协同工作。

3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行 子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

三、参与者

1.Target 定义Client使用的与特定领域相关的接口。

2.Client 与符合Target接口的对象协同。

3.Adaptee 定义一个已经存在的接口,这个接口需要适配。

4.Adapter 对Adaptee的接口与Target接口进行适配

四、类图

在这里插入图片描述

五、示例

Target

/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Target接口
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public interface Target {
    void adapteeMethod();
    void adapterMethod();
}

Adaptee

/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 适配器类
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Adaptee {

    public void adapteeMethod() {
        System.out.println("Adaptee method!");
    }
}

Adapter

/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Target的实现类
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Adapter implements Target{

    private Adaptee adaptee;

    public Adapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }

    @Override
    public void adapteeMethod() {
        adaptee.adapteeMethod();
    }

    @Override
    public void adapterMethod() {
        System.out.println("Adapter method!");
    }
}

Client

/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 测试类
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Test {
    public static void main(String[] args) {
        Target target = new Adapter(new Adaptee());
        target.adapteeMethod();
        target.adapterMethod();
    }
}

Result

Adaptee method!
Adapter method!

好了,今天就到这儿吧,相信大家对适配器模式有了更清晰的了解,我是冰河,我们下期见~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flex 布局:一行固定个数,超出换行(流式布局)

一、flex基础 设置在父容器上的属性:display:flex,align-items(交叉轴对齐方式),justify-content(主轴对齐方式),flex-wrap(换行)。 设置在子容器上的属性,通过 flex: 1,简写了 flex-grow、fl…

2023最新计算机信息管理毕设选题分享

文章目录 0 前言1 java web 管理系统 毕设选题2 java web 平台/业务系统 毕设选题3 游戏设计、动画设计类 毕设选题 (适合数媒的同学)4 算法开发5 数据挖掘 毕设选题6 大数据处理、云计算、区块链 毕设选题7 网络安全 毕设选题8 通信类/网络工程 毕设选题9 嵌入式 毕设选题10 开…

高性能数据JS网格 Bryntum Grid 5.5.2 Crack

高性能数据网格 Bryntum Grid 是一个高性能的网络表格组件。它是用纯 JavaScript 构建的,并且可以轻松地与所有主要 JS 框架集成。 功能丰富 Bryntum Grid 具有您期望从专业网格组件获得的所有功能,包括: 很好的表现;很好的绩效 没有人喜欢缓…

关于卫星电话的冷知识

卫星电话功率 卫星电话的发射功率取决于以下几个因素: 卫星的轨道高度:卫星的轨道高度越高,卫星电话与卫星之间的距离越远,信号衰减越大,因此需要更大的发射功率。一般来说,同步轨道卫星(GEO&…

[每周一更]-(第61期):Rust入门策略(持续更新)

一门语言的学习,就要从最基本的语法开始认识,再分析不同语言的区别,再加上实战,才能更快的学会,领悟到作者的设计思想; 介绍 Rust编程练习 开发工具VSCode及插件 社区驱动的 rust-analyzerEven Better T…

再生龙clonezilla系统镜像下载

官网 Clonezilla - 簡介 下载

uniapp video全屏 cover-view 失效

查看官方文档 video | uni-app官网 确定自己开发的是app端 还是 微信小程序,我开发的是app端,所以在nvue文件写,同时cover-view组件要在video组件内容。 我写了一个简单的视频组件,可以看我另一篇博客。 uniapp video&#xff08…

Windows排查恶意程序及一些工具

目录 基础排查 使用系统配置实用程序 检查启动项 检查注册表 工具 网络监控 系统监控 安全检测 文件活动监控 其他 基础排查 使用系统配置实用程序 按下Win R键组合打开运行对话框,然后输入"msconfig"并按Enter键。在"服务"选项卡…

Cpolar+Emlog搭建指南—在Ubuntu上轻松创建个人博客,无需专业技能

前言 博客作为使用最广的个人在互联网的发声网站,在很长一段时间里,都被大家视作在互联网上发声的主要通道之一。虽然之后出现的即时聊天工具和朋友圈崛起,抢夺了不少博客的空间,但其仍占有不小的市场份额。也正因博客很重要&…

24、京东只换不修服务,电脑经常蓝屏申请只换不休记录

我在今年4.22号买了一台机械革命蛟龙k16,然后在后面的使用过程中,差不多就是20天左右蓝屏一次,问题是蓝屏的时候我也没干嘛,就是莫名其妙。 第一次蓝屏的时候是在看电影,突然就显示系统出现故障,准备重启&a…

星创易联加入低速无人驾驶产业联盟,为客户和社会创造更大价值!

原文:https://www.key-iot.com/companynews/2538.html 低速无人驾驶产业联盟受益于自动驾驶政策扶持、疫情催生需求等多方面因素影响,中国低速无人驾驶行业发展开始加速。是国内第一家也是唯一一个专注于低速无人驾驶领域的联盟组织,低速无人…

Python中的常见问题与解决方案

机器学习作为当今最热门的领域之一,为数据科学和人工智能带来了巨大的突破和进步。然而,在Python中进行机器学习和深度学习开发时,我们可能会遇到一些常见的问题。本文将分享一些这些常见问题,并给出解决方案,帮助您更…

2023年9月CSPM-3国标项目管理中级认证报名到这错不了

CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要…

Qt6 for Android(HarmonyOS)真机调试

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在《Qt6 for Android 环境搭建》一节中,我们详细地讲解了 JDK、Android SDK、NDK 的下载安装,以及这些工具在 Qt Creator 中配置。在 Android 环境搭建成功之后,我们还特地创建了两个 AVD(安卓虚拟设备)…

C++ - day2

1、封装一个结构体&#xff0c;完成存放学生成绩等功能 #include <iostream> #define MAX 50 using namespace std;struct Stu { private://学生成绩int score[MAX];//学生个数int num;public://设置学生个数void setNum(){cout<<"设置学生个数&#xff1a;&…

Python爬虫基础(一):urllib库的使用详解

文章目录 系列文章索引一、urllib库的使用1、基本介绍2、response的类型和关键方法3、下载文件4、GET请求实例&#xff08;1&#xff09;设置请求头&#xff08;百度&#xff09;&#xff08;2&#xff09;使用quote方法对get参数编码&#xff08;百度&#xff09;&#xff08;…

Retinexformer 论文阅读笔记

Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement 清华大学、维尔兹堡大学和苏黎世联邦理工学院在ICCV2023的一篇transformer做暗图增强的工作&#xff0c;开源。文章认为&#xff0c;Retinex的 I R ⊙ L IR\odot L IR⊙L假设干净的R和L&…

ARM架构源码编译RXTX LINUX JAVA串口开发项目部署

文章目录 手动编译源码原因源码下载编译源码编译中遇到的问题错误一&#xff1a;错误2错误3 安装成功后显示验证安装目录文件总结 手动编译源码原因 官网不提供ARM架构的依赖包 源码下载 wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7r2.zip解压 unzip rxtx-2.1-7r2.zip…

window gradle配置本地仓库与加速、复用本地仓库

文章目录 一、Gradle 的默认本地仓库二、window修改本地仓库1. 新建系统变量&#xff1a;2.Gradle Daemon配置&#xff0c;开启这个配置能有效的提高编译速度 idea修改gradle加速 一、Gradle 的默认本地仓库 默认gradle仓库位置为: C:\Users\用户名\.gradle 二、window修改本…

LayoutLM【论文翻译】

文章目录 基础信息0 ABSTRACT1 INTRODUCTION2 LAYOUTLM2.1 The BERT Model2.2 The LayoutLM Model2.3 Model Architecture2.4 Pre-training LayoutLM2.5 Fine-tuning LayoutLM 3 EXPERIMENTS3.1 Pre-training Dataset3.2 Fine-tuning Dataset3.3 Document Pre-processing3.4 Mo…