有趣的设计模式——适配器模式让两脚插头也能使用三孔插板

news2024/11/15 8:17:12

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

场景与问题

众所周知,我们国家的生活用电的电压是220V而笔记本电脑、手机等电子设备的工作压没有这么高。为了使笔记本、手机等设备可以使用220V的生活用电就需要使用电源适配器(AC Adapter);也就是人们常说的充电器或变压器。有了这个电源适配器,原本不能直接工作的生活用电和笔记本电脑就可以兼容了。

在这里插入图片描述

另外,在生活中我们还经常类似头痛的小问题:插座是两脚的,但是插板却是三孔的。这个该怎么办呢?此时,适配器设计模式就能够帮到你!

适配器模式概述

在此,概述适配器模式。

适配器模式定义

Adapter Pattern: Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时在适配器类的内部将调用适配者类的方法而这个过程对客户类是透明的;客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一起工作。

适配器模式可以将一个类的接口和另一个类的接口匹配起来而无须修改原来的适配者接口和抽象目标类接口。

适配器模式角色

在此,介绍适配器模式中的主要角色。

目标角色(Target):客户端所期待的接口(可以是具体类或者抽象类)。
源角色(Adaptee):被适配者。已经存在的需要适配的接口或类。
适配器(Adapter):将源接口转换成目标接口。

适配器模式案例

在此,以案例形式讲解适配器模式。

案例一

请看适配器模式案例一;项目结构如下:
在这里插入图片描述

Adaptee

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {
    public void adapteeMethod() {
        System.out.println("两脚插头正常工作");
    }
}

在这里插入图片描述

Target

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标接口(客户所期待的接口)。例如:三孔插板
*/
public interface Target {
    void targetMethod();
}

在这里插入图片描述

Adapter

package com.adapter01;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Adaptee implements Target {
	// 实现Target接口中的方法
    @Override
    public void targetMethod() {
    	// 调用Adaptee中的方法
        super.adapteeMethod();
    }
}

在这里插入图片描述

Test

package com.adapter01;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {
	public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.targetMethod();
	}
}

在这里插入图片描述

测试

在这里插入图片描述

案例二

请看适配器模式案例二;项目结构如下:

在这里插入图片描述

Adaptee

package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {
    public void adapteeMethod() {
        System.out.println("两脚插头正常工作");
    }
}

在这里插入图片描述

Target

package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标类(客户所期待的类)。例如:三孔插板
*/
public abstract class Target {
	abstract void targetMethod();
}

在这里插入图片描述

Adapter

package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Target {
	// 持有Adaptee对象
	private Adaptee adaptee;

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

	// 重写父类Target中的方法
    @Override
    public void targetMethod() {
    	// 调用Adaptee中的方法
    	adaptee.adapteeMethod();
    }
}

在这里插入图片描述

Test

package com.adapter02;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {
	public static void main(String[] args) {
		Adaptee adaptee = new Adaptee();
        Adapter adapter = new Adapter(adaptee);
        adapter.targetMethod();
	}
}

在这里插入图片描述

测试

在这里插入图片描述

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

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

相关文章

API(九)基于协程的并发编程SDK

一 基于协程的并发编程SDK 场景: 收到一个请求会并发发起多个请求,使用openresty提供的协程说明: 这个是高级课程,如果不理解可以先跳过遗留: APSIX和Kong深入理解openresty 标准lua的协程 ① 早期提供的轻量级协程SDK ngx.thread ngx…

国内外交通数据集介绍(附参数说明)

国外数据集 NGSIM数据集 NGSIM数据集采集自美国,数据集中包含两条高速公路(US-101,I-80)及两条城市道路(lankershim,peachtree)的数据,每条道路的采集时间为45min。数据集中包含包含…

荣耀亲选耳机Wingcloud X5s Pro新品上市:9月15日首次亮相

荣耀亲选耳机Wingcloud X5s Pro以其46dB自适应主动降噪、Hi-Res高保真音质和40小时超长续航的特点而备受期待。首次亮相的新品外观圆润流畅,充满了现代感和时尚气息,无论是冰岛白的典雅大方,还是钛银色的成熟经典,每一个细节显示着…

记录crack某IDE插件过程

声明:本文仅记录学习过程,已对关键位置脱敏处理,未提供任何工具,请支持正版。 反编译jar包 使用cfr进行对插件核心jar包MyBxxxxxx-obfuss.jar进行反编译,在本地生成a.txt。 java -jar cfr-0.152.jar MyBxxxx-obfuss.…

车云一体化数字孪生再跨步!数据「精准反哺」整车定制化开发

汽车智能化竞争焦点,已经从单车智能延伸至云端。 尤其是在软件定义汽车的驱动下,汽车软件开发贯穿整个汽车生命周期。而基于SOA的车云一体化软件开发能力,通过跨车云的服务化架构、数据闭环等,支撑着传统V型瀑布式开发&#xff0…

苹果的市场份额下滑了,事实证明国内能与苹果竞争的只有它

分析机构给出二季度国内600美元以上手机市场的报告,报告指出苹果的市场份额已显著下滑,国产手机品牌占有的市场份额则已取得较大的提升,让人意外的是成功抢走苹果市场份额的仍然是之前的那家国产手机品牌。 据分析机构的数据显示,…

Zabbix监控组件及流程

Zabbix 由5大组件构成 Zabbix Web、Zabbix Server、Zabbix Proxy、Zabbix Database、Zabbix Agent Zabbix监控系统具体监控系统流程如图: Zabbix Web Zabbix Web是基于PHP语言编写的WEB UI界面,展示Zabbix整个监控平台监控数据、配置信息、方便对整个…

医学图像分割:Self-supervised Semantic Segmentation: Consistency over Transformation

论文作者:Sanaz Karimijafarbigloo,Reza Azad,Amirhossein Kazerouni,Yury Velichko,Ulas Bagci,Dorit Merhof 作者单位:University of Regensburg;RWTH Aachen University;Iran University of Science and Technology;Northwestern University;Fraunho…

unity UDP 通信

客户端 接收端 : using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.UI;public cla…

轻松剪辑大量视频,批量AI智剪让你省时又省力

在今天的数字时代,视频已经成为了信息传播的主要方式之一。无论是个人用户还是专业人士,都需要对视频进行剪辑以满足各种需求。但是,对于一些需要处理大量视频的情况,传统的剪辑方式往往费时费力。幸运的是,有一种名为…

利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino

我们前面的博文《输入端口少如何扩展?74hc148或74ls148级联在arduino中实现16转4的应用》介绍了148,148输入后可以立即输出到数码管,可以说它是自带编BCD编码器的。而今天这里我们主要介绍的74hc165是没有编码器,这里我们以proteus为仿真环境…

sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。

现象: 系统出现异常,手动执行过程提示如上。 问题排查: 1.直接执行的过程事务挂起(排除) 2.重启数据库实例(重启后无效) 3.过程中套用过程,套用的过程中使用事务,因为…

计算机丢失mfc140u.dll怎么办,mfc140u.dll丢失的解决方法分享

随着科技的飞速发展,计算机已经成为了人们日常生活和工作中不可或缺的工具。然而,在使用计算机的过程中,用户可能会遇到各种问题,其中计算机丢失 mfc140u.dll 无法运行的问题就是一个比较常见的困扰。小编将从以下几个方面对这个问…

Ubuntu22.04配置WiFi

Ubuntu22.04配置WiFi 注意:在/etc/netplan/​下的配置文件,格式一定要正确,否则用sudo netplan try​的时候会报错 一、查看无线网卡的名称 //choice-1 ls /sys/class/net//choice-2 ip a//choice-3 ifconfig -a‍ 二、修改配置文件 文件…

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 在当今社会&#xff0…

ChatGPT Code Interpreter实用教程,14种方法助你数据分析绘图

目录 1. 设置解释一下上传的文档高难度:根据文档创建10个可视化图表代表不同的数据。 1. 设置 勾选 Advanced data analysis 选择GPT-4,下面已经出现了代码解释器 点击 解释一下上传的文档 Prompt:请用简单的语言,解释一下该…

eMAG、ManoMano、Allegro店铺如何快速出单?自己产号测评的重要性

对于一个新开的店铺而言,首先要做的就是想办法让自己的店铺快速出单,只有有订单了,才能够稳住局势,才能够让自己店铺在市场上有立足的资本。 不过对于一个店铺而言,要想做到快速出单是很难的,尤其是一个新…

Java学习——基本语法笔记

1. 基本框架 Java中的程序是以类为单位,所以所有的程序都必须在class定义范畴之内, 类的定义有两种形式: class 类名称{程序代码 } public class 类名称{程序代码 } ⭐public class定义类,要求文件名称与类名称一致 ⭐如果现在没有…

⑩ vue新特性

ref 或者reactive ref相当于data methods props和context props !!!setup中没有this关键字,使用context(简写:ctx)就是this 在steup中使用生命周期函数 Provide / Inject 1、原来是 a传…

CANopen扫盲

目录 1 概述 2 CANopen 的基本概念 3 基于对象的通信 4 对象字典 5 EDS 文件 6 服务数据对象(SDO) 7 过程数据对象(PDO) 8 网络管理(NMT)概述 9 守护与心跳 10 紧急消息 1 概述 CANopen是基于CAN…