设计模式 适配器模式

news2024/9/27 5:56:16

1.背景
适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把这些不同的电压转换为你需要的 36V 电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢

2.B接口转换为 A 接口,怎么办?继承,能解决,但是比较傻

在这里插入图片描述
通过适配器,把 OuterUser 伪装成我们系统中一个 IUserInfo 对象

本系统的接口:

public interface IUserInfo { 
 
	//获得用户姓名
	public String getUserName(); 
	 
	//获得家庭地址
	public String getHomeAddress(); 
	 
	//手机号码,这个太重要,手机泛滥呀
	public String getMobileNumber(); 
	 
	//办公电话,一般式座机
	public String getOfficeTelNumber(); 
	 
	//这个人的职位是啥
	public String getJobPosition(); 
	 
	//获得家庭电话,这个有点缺德,我是不喜欢打家庭电话讨论工作
	public String getHomeTelNumber(); 

} 

这个接口的实现类:

public class UserInfo implements IUserInfo { 
	/* 
	 * 获得家庭地址,下属送礼也可以找到地方
	*/
	public String getHomeAddress() { 
		 System.out.println("这里是员工的家庭地址...."); 
		 return null; 
	 } 
	/* 
	 * 获得家庭电话号码
	 */
	public String getHomeTelNumber() { 
		 System.out.println("员工的家庭电话是...."); 
		 return null; 
	 } 
	/* 
	 * 员工的职位,是部门经理还是小兵
	 */
	public String getJobPosition() { 
		 System.out.println("这个人的职位是BOSS...."); 
		 return null; 
	 } 
	/* 
	 * 手机号码
	 */
	public String getMobileNumber() { 
		 System.out.println("这个人的手机号码是0000...."); 
		 return null; 
	 } 
	/* 
	 * 办公室电话,烦躁的时候最好“不小心”把电话线踢掉,我经常这么干,对己对人都有好处
	 */
	public String getOfficeTelNumber() { 
		 System.out.println("办公室电话是...."); 
		 return null; 
	 } 
	/* 
	 * 姓名了,这个老重要了
	 */
	public String getUserName() { 
		 System.out.println("姓名叫做..."); 
		 return null;
	 } 
} 

本系统程序运行

public class App { 
	public static void main(String[] args) { 
		 //没有与外系统连接的时候,是这样写的
		 IUserInfo youngGirl = new UserInfo(); 
		 //从数据库中查到101个
		 for(int i=0;i<101;i++){ 
			 youngGirl.getMobileNumber(); 
		 }  
	} 
}

外部系统的接口:

@SuppressWarnings("all") 
public interface IOuterUser { 
 
	//基本信息,比如名称,性别,手机号码了等
	public Map getUserBaseInfo(); 
	 
	//工作区域信息
	public Map getUserOfficeInfo(); 
	 
	//用户的家庭信息
	public Map getUserHomeInfo(); 
 
}

外部系统的接口的实现类:

@SuppressWarnings("all") 
public class OuterUser implements IOuterUser { 
	/* 
	 * 用户的基本信息
	 */
	public Map getUserBaseInfo() { 
		 HashMap baseInfoMap = new HashMap(); 
		 
		 baseInfoMap.put("userName", "这个员工叫混世魔王...."); 
		 baseInfoMap.put("mobileNumber", "这个员工电话是....");
		 return baseInfoMap; 
	 } 
	/* 
	 * 员工的家庭信息
	 */
	public Map getUserHomeInfo() { 
		 HashMap homeInfo = new HashMap(); 
		 
		 homeInfo.put("homeTelNumbner", "员工的家庭电话是...."); 
		 homeInfo.put("homeAddress", "员工的家庭地址是...."); 
		 
		 return homeInfo; 
	 } 
	/* 
	 * 员工的工作信息,比如职位了等
	 */
	public Map getUserOfficeInfo() { 
		 HashMap officeInfo = new HashMap(); 
		 
		 officeInfo.put("jobPosition","这个人的职位是BOSS..."); 
		 officeInfo.put("officeTelNumber", "员工的办公电话是...."); 
		 
		 return officeInfo; 
	 } 
}

外系统的用户信息包装成我们公司的人员信息呢?看下面的 OuterUserInfo 类源码,也就是
我们的适配器:接口实现的是本系统的接口

@SuppressWarnings("all") 
public class OuterUserInfo extends OuterUser implements IUserInfo { 
 
private Map baseInfo = super.getUserBaseInfo(); //员工的基本信息
private Map homeInfo = super.getUserHomeInfo(); //员工的家庭 信息
private Map officeInfo = super.getUserOfficeInfo(); //工作信息
 
/* 
 * 家庭地址
 */
public String getHomeAddress() { 
 String homeAddress = (String)this.homeInfo.get("homeAddress"); 
 System.out.println(homeAddress); 
 return homeAddress; 
 } 
/* 
 * 家庭电话号码
 */
public String getHomeTelNumber() { 
 String homeTelNumber = (String)this.homeInfo.get("homeTelNumber"); 
 System.out.println(homeTelNumber); 
 return homeTelNumber; 
 } 
/* 
 *职位信息
 */
public String getJobPosition() { 
 String jobPosition = (String)this.officeInfo.get("jobPosition"); 
 System.out.println(jobPosition); 
 return jobPosition; 
 } 
/* 
 * 手机号码
 */
public String getMobileNumber() { 
 String mobileNumber = (String)this.baseInfo.get("mobileNumber"); 
 System.out.println(mobileNumber); 
 return mobileNumber; 
 } 
/*
* 办公电话
 */
public String getOfficeTelNumber() { 
 String officeTelNumber = (String)this.officeInfo.get("officeTelNumber"); 
 System.out.println(officeTelNumber); 
 return officeTelNumber; 
 } 
/* 
 * 员工的名称
 */
public String getUserName() { 
 String userName = (String)this.baseInfo.get("userName"); 
 System.out.println(userName); 
 return userName; 
 } 
}

运行:

public class App { 
public static void main(String[] args) { 
 //没有与外系统连接的时候,是这样写的
 //IUserInfo youngGirl = new UserInfo();
 
 //老板一想不对呀,兔子不吃窝边草,还是找人力资源的员工好点
 IUserInfo youngGirl = new OuterUserInfo(); //我们只修改了这一句好   OuterUserInfo  是适配器
 //从数据库中查到101个
 for(int i=0;i<101;i++){ 
 youngGirl.getMobileNumber(); 
 } 
 
 } 
}

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

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

相关文章

操作系统面经-什么是操作系统?

通过以下四点可以概括操作系统到底是什么&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是管理计算机硬件与软件资源的程序&#xff0c;是计算机的基石。操作系统本质上是一个运行在计算机上的软件程序 &#xff0c;主要用于管理计算机硬…

DP:路径规划模型

创作不易&#xff0c;感谢三连支持&#xff01; 路径规划主要是让目标对象在规定范围内的区域内找到一条从起点到终点的无碰撞安全路径。大多需要用二维dp数组去实现 一、不同路径 . - 力扣&#xff08;LeetCode&#xff09;不同路径 class Solution { public:int uniquePath…

自动驾驶---Motion Planning之轨迹Path优化

1 背景 在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。 …

基于springboot的4S店车辆管理系统

基于springboot的4S店车辆管理系统 的设计和实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

算法-最短路径

图的最短路径问题是一个经典的计算机科学和运筹学问题&#xff0c;旨在找到图中两个顶点之间的最短路径。这种问题在多种场景中都有应用&#xff0c;如网络路由、地图导航等。 解决图的最短路径问题有多种算法&#xff0c;其中最著名的包括&#xff1a; 1.迪杰斯特拉算法 (1).…

抖音小店怎么定类目?分享几个爆单几率大,适合新手的细分类目!

大家好&#xff0c;我是电商糖果 做电商的应该经常听过这么一句话&#xff0c;类目大于一切&#xff01; 好的类目可以让商家减少很多竞争和难题。 糖果做电商有很多年了&#xff0c;我一直认为做店前期最难的定类目&#xff0c;中期是选品&#xff0c;后期是维护店铺。 如…

物联网数据报表分析

随着物联网技术的迅猛发展&#xff0c;越来越多的企业开始将物联网解决方案应用于各个领域&#xff0c;从提高生产效率到优化用户体验&#xff0c;物联网都发挥着至关重要的作用。然而&#xff0c;如何有效地分析和管理物联网产生的海量数据&#xff0c;成为企业面临的挑战之一…

【Java开发过程中的流程图】

流程图由一系列的图形符号和箭头组成&#xff0c;每个符号代表一个特定的操作或决策。下面是一些常见的流程图符号及其含义&#xff1a; 开始/结束符号&#xff08;圆形&#xff09;&#xff1a;表示程序的开始和结束点。 过程/操作符号&#xff08;矩形&#xff09;&#xff…

<Linux> 生产者消费者模型

目录 前言&#xff1a; 一、什么是生产者消费者模型 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;生产者消费者之间的关系 &#xff08;三&#xff09;生产者消费者模型特点 &#xff08;四&#xff09;生产者消费者模型的优点 二、基于阻塞队列实现生产…

《定时执行专家》:Nircmd 的超级搭档,解锁自动化新境界

目录 Nircmd 简介 《定时执行专家》与 Nircmd 的结合 示例&#xff1a; 自动清理电脑垃圾: 定时发送邮件: 定时关闭电脑: 《定时执行专家》的优势: 总结: 以下是一些其他使用示例&#xff1a; 立即下载《定时执行专家》&#xff1a; Nircmd 官方网站&#xff1a; 更…

代码随想录阅读笔记-栈与队列【用队列实现栈】

题目 使用队列实现栈的下列操作&#xff1a; push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言…

普发Pfeiffer镀膜机Classic580-500SP Spider600 全套资料包含操作使用说明

普发Pfeiffer镀膜机Classic580-500SP Spider600 全套资料包含操作使用说明

LeetCode---126双周赛

题目列表 3079. 求出加密整数的和 3080. 执行操作标记数组中的元素 3081. 替换字符串中的问号使分数最小 3082. 求出所有子序列的能量和 一、求出加密整数的和 按照题目要求&#xff0c;直接模拟即可&#xff0c;代码如下 class Solution { public:int sumOfEncryptedInt…

瑞芯微RK3576|触觉智能:开启科技新篇章

更多产品详情可关注深圳触觉智能官网&#xff01; “瑞芯微&#xff0c;创新不止步&#xff01;”——全新芯片RK3576即将震撼登场。指引科技风潮&#xff0c;创造未来无限可能&#xff01;这款芯片在瑞芯微不断创新和突破的道路上&#xff0c;不仅是对过往成就的完美延续&…

ROS2从入门到精通0-3:VSCode 搭建 ROS2 工程环境

目录 0 专栏介绍1 Ubuntu下安装VSCode1.1 基本安装1.2 将VSCode添加到侧边栏 2 VSCode集成相关插件3 VSCode运行ROS2环境步骤3.1 安装编译依赖项3.2 创建工作空间和源码空间3.3 启动VSCode与配置 4 测试工程环境4.1 C版本4.2 Python版本 0 专栏介绍 本专栏旨在通过对ROS2的系统…

【机器学习入门 】逻辑斯蒂回归和分类

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 文章目录 系列文章目录前言一、分类问题的数学形式二、最大似然估计三、交叉熵损失函数四、多类别分类多类别逻辑斯蒂回归归一化指数函数交叉熵误差和均方误差的比较 五…

详解JavaScript中this指向

this 原理 this 是一个指针型变量&#xff0c;它指向当前函数的运行环境。 1.内存的数据结构 var obj { foo: 5 };2.函数 var obj { foo: function () {} };引擎会将函数单独保存在内存中&#xff0c;然后再将函数的地址赋值给foo属性的value属性。 由于函数是一个单独的…

目标检测——PP-YOLO算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(七): 聚酰亚胺PI薄膜的厚度

聚酰亚胺PI薄膜的厚度 聚酰亚胺&#xff08;PI&#xff09;薄膜的厚度可以根据具体的应用需求而有所不同&#xff0c;通常可以在几个微米&#xff08;μm&#xff09;到几十微米之间。下面是一些常见的聚酰亚胺PI薄膜的厚度范围及其应用&#xff1a; 1.超薄膜&#xff1a; 聚酰…

记录‘No module named ‘notebook.notebookapp‘’导致jupyter打不开的解决方法

最初是因为无法重命名文件的问题&#xff0c;更新了notebook&#xff0c;但是更新之后打不开了 在终端输入 jupyter notebook 报错 File "/Users/maclin/Library/Python/3.8/bin/jupyter-notebook", line 5, in <module> from notebook.notebookapp import ma…