设计模式再探——适配器模式

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 1.适配器模式简介
    • 2.适配器模式的类图
    • 3.适配器模式代码
    • 4.适配器模式,类适配器模式和对象的对比
    • 5.适配器模式终极奥秘
  • 四、总结
  • 五、升华

一、背景介绍

最近公司在对业务模型做构建的时候,涉及到和三方系统的对接,这让我想到了适配器模式,而如何正确理解和运用适配器模式,相信这篇文章会给你更深入的体会。

二、思路&方案

  • 1.适配器模式简介
  • 2.适配器模式的类图
  • 3.适配器模式代码
  • 4.适配器模式,类适配器模式和对象的对比
  • 5.适配器模式终极奥秘

三、过程

1.适配器模式简介

适配器模式(adapter):将一个类的接口转换成客户希望的另一个接口。Adapter模式将原本由于接口不兼容而不能一起工作的类可以一起工作。

2.适配器模式的类图

在这里插入图片描述

3.适配器模式代码

package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:40*/
public class Client {public static void main(String[] args) {//这里通过配置文件+反射实现具体要new的子类,以遵循开闭原则Target target = new Target();target.Request();target = new Adapter();target.Request();}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:26*/
public class Target {public void Request(){System.out.println("target的Request方法输出");}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:35*/
public class Adapter extends Target {Adaptee adaptee = new Adaptee();@Overridepublic void Request() {
//        System.out.println("Adapter的Request方法输出内容");adaptee.SpecificRequest();}
}
package com.a7DesignPattern.a2StructuralType.a01Adapter;/*** 功能描述:** @Author:makang* @Date: 2021/5/3 15:34*/
public class Adaptee {public void SpecificRequest(){System.out.println("adaptee的SpecificRequest方法输出");}
}

4.适配器模式,类适配器模式和对象的对比

通过java可以模拟实现类适配器模式;

  • 4.1.用一个抽象类和一个接口当做类的两个父类
  • 4.2.将抽象类的抽象方法体(名字、入参、出参)和接口的方法体(名字、入参、出参)一致
  • 4.3.抽象类和接口分别用在不同的地方
  • 4.4.让给一个类分别继承抽象类,和实现接口;从而达到在不同地方,适配成相同实现的效果
    在这里插入图片描述

5.适配器模式终极奥秘

什么时候考虑使用适配器模式? 永远都用不到适配器模式的时候就是对适配器模式最好的运用。

四、总结

  • 1.适配器属于一种亡羊补牢的手法,但是也总比亡羊不补来的要好
  • 2.适配器真正带给我们的思考,是在让我们强化前期的设计,以及对于七大原则的严格遵守
  • 3.如果非得牵强的找一些场景的话,可以用在对接三方系统的场景上

五、升华

模式背后的逻辑,要在宏观的层面去了解它,你就会发现不识庐山真面目的意境。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习嵌入式系统的推荐步骤:

学习嵌入式系统的推荐步骤: 00001. C语言:作为基础中的基础,选择一本常用的C语言教材,并注意通过实践编写习题、编译运行代码来加深理解。动手实践是非常重要的。 00002. 00003. 微机原理与接口技术:这本教材将…

Web攻防01-ASP应用相关漏洞-HTTP.SYSIIS短文件文件解析ACCESS注入

文章目录 ASP-默认安装-MDB数据库泄漏下载漏洞漏洞描述 ASP-中间件 HTTP.SYS(CVE-2015-1635)1、漏洞描述2、影响版本3、漏洞利用条件4、漏洞复现 ASP-中间件 IIS短文件漏洞1、漏洞描述2、漏洞成因:3、应用场景:4、利用工具:5、漏洞…

深入理解Scrapy

Scrapy是什么 An open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way. Scrapy是适用于Python的一个快速、简单、功能强大的web爬虫框架,通常用于抓取web站点并从页面中提取结构化的数…

嵌入式软硬分工与职业发展

嵌入式软硬分工与职业发展: 嵌入式系统分为软件和硬件两个方向。大公司通常明确员工从事嵌入式软件或硬件工作,分工合理利用经验解决问题。小公司可能综合工作,但长期不利深入学习和发展,对个人竞争力不利。嵌入式软件一般指底层…

Python学习基础笔记七十一——模块和库2

将模块放入包中 模块文件,功能分的比较清晰。文件与文件之间,是通过import这种调用关系。 当我们的项目模块文件特别多的时候,我们还需要将这些模块文件根据功能划分到不同的目录中。 这些放模块文件的目录,python把它们称之为p…

公司销售个人号如何管理?

微信管理系统可以帮助企业解决哪些问题呢? 一、解决聊天记录监管问题 1.聊天记录的保存,让公司的管理者可以随时查看公司任意销售与客户的聊天记录,不用一个一个员工逐一去看,方便管理; 2.敏感词监控,管理者…

git操作说明

SourceURL:file:///home/kingqi/桌面/git操作说明.doc 本地建立仓库 mkdir namebao cd namebao pwd git init 初始化 cd .git/ gedit config 本地存储 进入目录上传全部文件 git add . 提交 git commit -m “说明” 远程提交 复制gitee或者github仓库链接 可以直…

Eslint配置 Must use import to load ES Module(已解决)

最近在配置前端项目时,eslint经常会碰到各种报错(灰常头疼~) Syntax Error Error No ESLint configuration found.Syntax Error: Error: D:\dmq\dmq-ui.eslintrc.js: Environment key “es2021” is unknown at Array.forEach ()error in ./…

实验四:回溯算法的设计与分析

某不知名学校大二算法课实验报告 题目来自力扣 第一题:幂集 力扣题目链接:幂集 题目描述: 幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。 说明:解集不能包含重复的子集。 示例: 输入&#xf…

问:TCP/IP协议栈在内核态的好还是用户态的好

“TCP/IP协议栈到底是内核态的好还是用户态的好?” 问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态。 引子 为了不让本文成为干巴巴的说教,在文章开头,我以一个实例分析开始。 最近一段时间,我几乎每…

【基础篇】七、Flink核心概念

文章目录 1、并行度2、并行度的设置3、算子链4、禁用算子链5、任务槽6、任务槽和并行度的关系 1、并行度 要处理的数据量很多时,可以把一个算子的操作(比如前面demo里的flatMap、sum),"复制"多份到多个节点&#xff0c…

phpcms_v9模板制作及二次开发常用代码

0:调用最新文章,带所在版块 {pc:get sql"SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM v9_news a, v9_category b WHERE a.catid b.catid ORDER BY a.id DESC " num"15" cache"300"} {lo…

postman接口测试

HTTP的接口测试工具有很多,可以进行http请求的方式也有很多,但是可以直接拿来就用,而且功能还支持的不错的,我使用过的来讲,还是postman比较上手。 优点: 1、支持用例管理 2、支持get、post、文件上传、响…

计网面试复习自用

五层: 应用层:应用层是最高层,负责为用户提供网络服务和应用程序。在应用层,用户应用程序与网络进行交互,发送和接收数据。典型的应用层协议包括HTTP(用于网页浏览)、SMTP(用于电子邮…

如何提高企业工作微信的管理效率?

微信作为一款拥有数亿用户的软件,其使用频率在全国范围内居高不下。随着企业的不断发展,微信在工作中的应用也变得越来越广泛。为了更好地服务客户并提升业务效益,企业通常会为新入职员工配置工作微信以便于业务沟通和客户服务。然而&#xf…

iCloud涨价不用慌!学会使用群晖生态将本地SSD“上云”

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是想使用群晖生态软件,就必须要在服务端安装群晖系统,具体如何安装群晖虚拟机请参考: 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

存在已打开的MicrosoftEdge浏览器,无法执行安装

存在问题:UiBot Creator 安装Chrome扩展时,存在已打开的MicrosoftEdge浏览器,无法执行安装。 解决办法: 打开MicrosoftEdge浏览器,然后在浏览器页面右上角打开“…”图标 第二步,打开“…”图标之后&…

MAC上使用Wireshark常见问题

文章目录 介绍正文启动异常-Permission denied解决方法 过滤协议和地址指定源地址和目的地址调整 time format 介绍 简单记录Wireshark在日常使用过程中的遇到的小case。 正文 Wireshark相较于tcpdump使用较为简单,交互也更为友好。 点击Start即可启动抓包 启动…

【OpenCv光流法进行运动目标检测】

opencv系列文章目录 文章目录 opencv系列文章目录前言一、光流法是什么?二、光流法实例1.C的2.C版本3.python版本 总结 前言 随着计算机视觉技术的迅猛发展,运动目标检测在图像处理领域中扮演着至关重要的角色。在现实世界中,我们常常需要追…

Mysql5.7大限将至升级Mysql 8.0过程记录(未完)

一、前言 时间很快,到2023年10月底,MySQL 5.7就到了它的EOL(End of Life),届时将不会提供任何补丁,无法应对潜在的安全风险;是时候和 MySQL 5.7 说再见了!!!&…