津津乐道设计模式 - 适配器模式详解(家里电器电源标准不统一的问题都解决了)

news2024/11/15 13:41:49

在这里插入图片描述

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

津津乐道设计模式 - 适配器模式详解

  • 什么是适配器模式
  • 适配器模式的应用场景
  • 生活案例
  • 代码案例
  • 适配器模式优缺点
  • 结语

什么是适配器模式

适配器模式(Adapter Pattern)是一种结构设计模式,用于将一个类的接口转换成用户所期望的另一个接口。它允许原本接口不兼容的类能够一起工作,提供了类与类之间的适配器,以便使它们能够协同工作。

意图
在这里插入图片描述
类图
在这里插入图片描述

适配器模式的应用场景

  • 接口不兼容:当现有类的接口与所需接口不兼容时,可以使用适配器模式来转换接口,使其能够协同工作。
  • 类的重用:如果你希望重用一些已经存在的类,但是它们的接口与你所需的接口不匹配,适配器模式可以帮助你将这些类集成到你的系统中。
  • 封装第三方库:当你使用一个第三方库或组件,但是它的接口与你的代码不兼容时,可以使用适配器模式将其封装起来,以便与你的代码进行交互。
  • 解耦性:适配器模式可以将客户端代码与具体类解耦,提高代码的灵活性和可维护性。

适配器模式适用于在不同接口之间进行适配的场景。它可以帮助我们解决接口不兼容的问题,实现系统的平滑过渡和集成,提高系统的灵活性和可维护性。

在我们日常生活中也经常能看到类似🉐️场景,比如电源插座转换头、手机充电转换头、显示器转换头等

生活案例

今天你的老婆海淘了一个美国生产的吹风机,然而你的老婆并不知道中国的电源标准是220V,而美国的电源标准是110V。这意味着这个美国生产的电吹风机在中国无法直接插入插座并工作。

在这种情况下,你可以使用适配器模式来解决问题。你可以购买一个电源适配器,它可以将中国的220V电源转换为适合美国电器的110V电源,从而解决你老婆的烦恼。

适配器模式将不兼容的接口转换为可兼容的接口。在这个场景中,电源适配器充当了一个适配器,将中国的插座(220V)适配为美国电器所需的插座(110V)。通过使用适配器,你完美解决了电源不兼容的问题,你老婆对你猛猛一顿夸 👏👏

代码案例

上面电源适配器案例中,我们可以创建一个适配器类,它实现了目标接口,并在内部持有一个适配者对象。适配器类将适配者的方法调用转换为符合目标接口的方法调用

首先,创建一个目标接口

/**
 * 目标接口
 */
public interface PowerSocket {
    void supplyPower();
}

构建电源适配者

/**
 * 构建国内电源适配者
 */
public class ChinesePowerSocket {
    public void supplyPower220V() {
        System.out.println("使用中国插座供电,输出220V电压");
    }
}

创建电源适配器类

/**
 * 电源适配器类
 */
public class PowerAdapter implements PowerSocket{
    private ChinesePowerSocket powerSocket;

    public PowerAdapter(ChinesePowerSocket powerSocket) {
        this.powerSocket = powerSocket;
    }
    @Override
    public void supplyPower() {
        System.out.println("通过适配器将电压转换为110V");
        powerSocket.supplyPower220V();
    }
}

最后测试代码

public class AdapterPatternTest {
    public static void main(String[] args) {
        ChinesePowerSocket chinesePowerSocket = new ChinesePowerSocket();
        PowerAdapter powerAdapter = new PowerAdapter(chinesePowerSocket);
        powerAdapter.supplyPower();
    }
}

最后输出效果如下:
在这里插入图片描述

适配器模式优缺点

适配器模式具有以下优点:

  • 适配器模式可以将不兼容的接口转换为可兼容的接口,使得原本无法协同工作的类能够一起工作,提高了代码的复用性和灵活性。
  • 适配器模式可以将适配器作为一个中间层,将客户端代码与具体类解耦,降低了类之间的耦合度,使得系统更加灵活和可维护。
  • 适配器模式可以通过增加新的适配器类来适配新的目标接口,而无需修改现有代码,符合开闭原则,对系统的扩展性和维护性有益。

适配器模式也有一些缺点:

  • 引入适配器会增加代码的复杂性,特别是当涉及多个适配器或复杂的适配逻辑时。过度使用适配器模式可能导致代码难以理解和维护。
  • 适配器模式引入了额外的间接层,可能会导致一定的性能损失。在性能敏感的场景中,需要权衡适配器带来的便利性和性能开销。

结语

本章主要介绍了什么是适配器模式,适配器模式的应用场景,并以一个实实在在的生活案例,演示了适配器模式的使用,方便大家加深印象~ 最后也总结了适配器模式优缺点,如果本文对你有用,欢迎关注收藏评论,大家一起探讨~

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

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

相关文章

Servlet 相关内容

1. Servlet 1.1 Servlet概述 Servlet 是 SUN 公司提供的一套规范,名称就叫 Servlet 规范,它也是 JavaEE 规范之一,可以通过API来学习。目前在Oracle官网中的最新版本是JavaEE8,该网址中介绍了JavaEE8的一些新特性。当然&#xff…

【C语言初阶】带你轻松玩转所有常用操作符(2) ——赋值操作符,单目操作符

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,今天给大家带来的是有关操作符的第二部分内容,废话不多说,咱们直接开始吧! 在正式开始之前,我们还是借助一张思维导图帮助大致简单回忆一下有…

Docker-compose的使用

目录 Docker-compose 简介 docker-compose的安装 docker-compose.yaml文件说明 compose的常用命令 总结 Docker-compose 简介 Docker-compose 是用于定义和运行多容器的 Docker 应用程序的工具。可以使用YAML文件来配置应用程序的服务。(通俗讲是可以通过yml文…

LeetCode108-将有序数组转换为二叉搜索树

题目来源 108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode) 题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵高度平衡 二叉搜索树。 高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的…

智慧地下采矿,“像素游戏”智能呈现

在这个像素世界里,我们需要一个智能地下采矿可视化综合管理平台,来帮助我们管理和监控地下采矿全流程。 图扑软件依托自主研发的 HT for Web 产品,结合三维定制化渲染、动态模拟、物理碰撞、5G、物联网、云计算及大数据等先进技术&#xff0c…

从零开始理解Linux中断架构(8)---执行上下文之CPU上下文

1 CPU上下文的来由 CPU上下文是切换任务到CPU时需要保存和恢复的CPU寄存器。ARM64需要保存的寄存器如下图所示 X19-X29作为CPU上下文的依据是什么? 实际上这里使用了一个隐含的事实:Linux所有的任务切换都是在内核中__switch_to函数中进行的,当前任务通过__…

KubeSphere 社区双周报 | OpenFunction 发布 v1.1.1 | 2023.6.9-6.22

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.6.9-6.22。 …

Elisp之定时器run-with-timer、run-with-idle-timer、run-at-time 区别(二十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

libevent(11)libevent中的循环和退出函数

一、libevent基本原理介绍 一个 event_base 对象相当于一个 Reactor 实例(不了解Reactor的读者可自行查询相关文章)。libevent默认情况下是单线程的,每个线程有且只有一个event_base,对应一个struct event_base结构体以及附于其上…

由于找不到msvcp120.dll无法继续执行代码怎么办?

msvcp120.dll是微软软件包的一部分。它是一个库文件,可用于支持软件运行时,msvcp120.dll的作用是提供计算机程序所需的标准库,msvcp120.dll还负责管理堆内存、线程和异常处理函数等。在使用windows编写的应用程序中,通常需要使用此…

android 如何分析应用的内存(八)——malloc debug

android 如何分析应用的内存(八) 接上文,介绍六大板块中的第三个————malloc调试和libc回调 上一篇文章中,仅仅是在分配和释放的时候,拦截对应的操作。而不能进一步的去检查内存问题。比如:释放之后再…

深入理解Android Jetpack Compose的Box

Box是一个提供了一种快速、简便的方式来对其子元素进行层叠布局的布局组件。 一、什么是Box? 二、如何使用Box? 三、Box中的contentAlignment属性 四、使用Modifier在Box内进行更复杂的布局 一、什么是Box? 在Compose中,Box是一个简单的布局组件&#xff0c…

如何写出高效、准确的会议记录?

在企业或组织中,会议是一种常见的沟通和决策方式。作为参会人员之一,撰写一份高效、准确的会议记录显得尤为重要。会议记录不仅记录了会议的主题、议题和讨论结果,还能帮助参与者回顾会议过程、梳理思路、明确职责,同时也为后续工…

快速入门JavaScript异步编程:从回调到async/await的跨越

文章目录 I. 介绍异步编程的背景和基本概念本文主要讨论JavaScript中的异步编程 II. 回调函数回调函数的定义、作用以及使用场景回调地狱的问题及解决方案 III. PromisePromise的定义、作用以及使用场景Promise的状态及状态转换Promise的链式调用和错误处理 IV. async/awaitasy…

深度学习之目标检测Fast-RCNN模型算法流程详解说明(超详细理论篇)

1.Fast-RCNN论文背景 2. Fast-RCNN算法流程 3.Fast R-CNN 问题和缺点 这篇以对比RCNN来说明,如果你对RCNN网络没太熟悉,可访问这链接,快速了解,点下面链接 深度学习之目标检测R-CNN模型算法流程详解说明(超详细理论篇…

合宙Air724UG Cat.1模块硬件设计指南--原理图设计注意事项

在设计原理时注意以下几点: 严格按照模块硬件手册设计原理图 1.调试接口: 调试务必留出usb(烧录脚本,升级用) ,1.8v(开机标志),uboot(强制烧录用)测试点&…

软件测试面试,大厂上岸究竟有什么秘诀?

最后,总结一下个人认为比较重要的知识点:接口自动化测试 :测试框架,多个有关联的接口的用例编写,用例的组织及存储,接口测试的覆盖率,RESTAssured 的封装等。UI 自动化测试 :iOS 和 …

Web自动化测试之滑动验证码的解决方案

目录 滑动验证破解思路 案例讲解 实现代码 运行效果: 根据传入滑块,和背景的节点,计算滑块的距离 滑动滑块进行验证 总结: 在Web自动化测试的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证…

Prompt不等于编程,“提示词工程师”淘汰程序员也是伪命题

Original 李建忠 李建忠研思 最近ChatGPT及基于大语言模型(Large Language Model,以下简写为LLM)的Github Copilot等工具出来之后,在软件开发领域也带来了非常大的震撼。著名的观点有Fixie创始人、前Google工程总监Matt Welsh在AC…

解决onblur()失去焦点事件在刚登陆页面(尚未有任何操作)时就触发的问题

文章目录 一、原始错误:1.1 原始代码1.2 访问页面(仅访问页面,不进行任何操作) 二、解决错误2.1 解决办法2.2 再次访问页面2.2.1 输入错误格式2.2.2 输入正确格式 最近笔者在编写代码时遇到刚访问页面,什么都没有操作&…