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


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址: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接口中的方法@Overridepublic 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中的方法@Overridepublic 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.hqwc.cn/news/109742.html

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

相关文章

Java高级: 反射

目录 反射反射概述反射获取类的字节码反射获取类的构造器反射获取构造器的作用反射获取成员变量&使用反射获取成员方法反射获取成员方法的作用 反射的应用案例 接下来我们学习的反射、动态代理、注解等知识点,在以后开发中极少用到,这些技术都是以后…

基于永磁同步发电机的风力发电系统连接到可控的三相整流器(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

完全保密的以太坊交易:Aztec网络的隐私架构

1. 引言 Aztec为隐私优先的以太坊zkRollup:即其为具有完全隐私保护的L2。 为了理解私有交易的范式变化性质,以及为什么将隐私直接构建到网络架构中很重要,必须首先讨论为什么以太坊不是私有的。 2. 以太坊:公有链 以太坊为具有…

用vagrant快速创建linux虚拟机

参考B站:https://www.bilibili.com/video/BV1np4y1C7Yf 1、下载VirtualBox 2、下载vagrant 3、vagrant官网下载.box文件 官网:https://app.vagrantup.com/boxes/search 例如要下载这个centos/7 点进去,点击下载 下载后放到一个指定目录…

2327. 知道秘密的人数;1722. 执行交换操作后的最小汉明距离;2537. 统计好子数组的数目

2327. 知道秘密的人数 核心思想:动态规划,每天的人可以分为三种,可分享秘密的人,不可分享秘密的人,忘记秘密的人。定义f[i]为第i天可分享秘密的人,那么第(idelay ,iforget)天,会增加f[i]个可分…

Rust通用编程概念(3)

Rust通用编程概念 1.变量和可变性1.执行cargo run2.变量3.变量的可变性4.常量5.遮蔽5.1遮蔽与mut区别1.遮蔽2.mut 2.数据类型1.标量类型1.1整数类型1.2浮点数类型1.3数字运算1.4布尔类型1.5字符类型 2.复合类型2.1元组类型2.2数组类型1.访问数组2.无效的数组元素访问 3.函数3.1…

⑩ vue新特性

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

基于springboot+vue的大学生智能消费记账系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型 简飞的飞友们!我并没有弃坑,只不过我不是你们想象的那样设计飞机。我之前写过一篇图文讲解如何在谷某地球里规划飞行航线: 手把手教你驾驶西锐SR-22小飞机在美国大峡谷中穿行https://b…

GLTF-pipeline

gltf-pipeline可用作命令行工具或 Node.js 模块。 开始 安装 Node.js如果还没有,然后: npm install -g gltf-pipeline使用 gltf-pipeline 作为命令行工具: 将 glTF 转换为 glb gltf-pipeline -i model.gltf -o model.glb gltf-pipeline…

华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

windows10搭建llama大模型

背景 随着人工时代的到来及日渐成熟,大模型已慢慢普及,可以为开发与生活提供一定的帮助及提升工作及生产效率。所以在新的时代对于开发者来说需要主动拥抱变化,主动成长。 LLAMA介绍 llama全称:Large Language Model Meta…