设计模式 适配器模式

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(); 
 } 
 
 } 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STC 51单片机烧录程序遇到一直检测单片机的问题

准备工作 一&#xff0c;需要一个USB-TTL的下载器 &#xff0c;并安装好对应的驱动程序 二、对应的下载软件&#xff0c;stc软件需要官方的软件&#xff08;最好是最新的&#xff0c;个人遇到旧的下载软件出现问题&#xff09; 几种出现一直检测的原因 下载软件图标&#xf…

【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1. 快乐数&#xff0…

杰发科技AC7801——读取Flash数据做CRC校验

查看Keil的编译结果发现总共6160个字节。计算结果如下&#xff0c; 代码如下 #include "ac780x_crc.h" #include "ac780x.h" #include "ac780x_debugout.h" #include "string.h" #include "ac780x_eflash.h"#define TestSi…

静态网络配置

一、查看网络命令 1.命令行查看网络配置 1、查看ip\硬件设备-网卡 ifconfig -a ifconfig ens160 网卡名称 ip addr show ip addr show ens160 nmcli device show ens160 nmcli con up ens160 2、主机名称 hostname hostname hfj.huaxia.com 3、查看路由和网关 rou…

leetcode 3081

leetcode 3081 题目 例子 思路 使用minheap 记录字符出现频次 代码 class Solution { public:string minimizeStringValue(string s) {int freq[26]{};for(char c: s){if(c ! ?){freq[c-a];}}//std::greater<> 比较器比较 pair 对象时&#xff0c;默认比较规则是先比…

Python数学建模-2.8SymPy库

SymPy库是一个强大的符号计算库&#xff0c;它为Python提供了符号数学计算的能力&#xff0c;它提供了大量的数学符号操作的函数和类&#xff0c;可以帮助用户进行各种复杂的数学计算&#xff0c;如代数、微积分、离散数学、量子力学等。与NumPy等库主要关注数值计算不同&#…

GAMES101 学习3

Lecture 13 ~ 16 Shadow mapping 一种图像空间算法生成阴影时不需要知道场景中的几何信息会产生走样现象 最重要的思想&#xff1a;如果有的点不在阴影里你又能看到这个点&#xff0c;那么说明摄像机可以看到这个点&#xff0c;光源也可以看到这个点 经典的Shadow mapping …

【管理咨询宝藏54】资产管理公司战略规划报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏54】资产管理公司战略规划报告 【格式】PPT&#xff0c;可自由编辑 【关键词】战略规划、商业分析、管理咨询 【核心观点】 - 随着本地和国外资…

最新Java面试题3【2024初级】

下载链接&#xff1a;博主已将以上这些面试题整理成了一个面试手册&#xff0c;是PDF版的 互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字…

计算机毕业设计-基于python的旅游信息爬取以及数据分析

概要 随着计算机网络技术的发展&#xff0c;近年来&#xff0c;新的编程语言层出不穷&#xff0c;python语言就是近些年来最为火爆的一门语言&#xff0c;python语言&#xff0c;相对于其他高级语言而言&#xff0c;python有着更加便捷实用的模块以及库&#xff0c;具有语法简单…

diffusion model(十四): prompt-to-prompt 深度剖析

infopaperPrompt-to-Prompt Image Editing with Cross Attention Controlgithubhttps://github.com/google/prompt-to-promptOrg:Google Research个人复现https://github.com/myhz0606/diffusion_learning个人博客主页http://myhz0606.com/article/p2p 1 前言 基于扩散模型&a…

LightGBM:更好更快地用于工业实践集成学习算法

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

教务管理系统(java+mysql+jdbc+Druid+三层架构)

1、项目要求 1.1数据库表描述 设计一个教务管理系统&#xff0c;要求如下&#xff1a; 系统涉及的表有 account表&#xff08;账号表&#xff09; teacher表&#xff08;教师表&#xff09; student表&#xff08;学生表&#xff09; course表 (课程表) score表&#xff08;成…

2022年安徽省职业院校技能大赛 (高职组)“云计算”赛项样卷

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 第一场次&#xff1a;私有云(5…

Redis高阶使用消息队列分布式锁排行榜等

一、前言 在大多数传统的web系统中&#xff0c;使用Redis一般都是作为缓存使用&#xff0c;在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用&#xff0c;还有做了注册中心&#xff0c;分布式事务。其他的强大的功能&#xff0c;没有…

【HMM】Hidden Markov Model

文章目录 1 HMM 的概念1.1 引入1.1.1 Markov property1.1.2 Markov chain1.1.3 一阶离散马尔可夫模型 1.2 HMM 的定义1.3 观测序列的生成过程1.4 HMM 的 3 个基本问题 2 三个基本问题的解法2.1 概率计算算法2.1.1 直接计算法2.1.2 向前算法2.1.3 向后算法2.1.4 一些概率与期望值…

localhost与127.0.0.1的区别 竟然还有人不知道?

localhost和127.0.0.1有什么区别&#xff1f;   很多用户都有接触过回送地址127.0.0.1用来测试一些数据&#xff0c;localhost在严格意义上来说是一个本地的服务器&#xff0c;编程用户或许更了解localhost的存在意义。   大多数使用localhost的编程工作者&#xff0c;实际…

java.lang.NoSuchFieldError: ASSIGN_ID

一、写在前面 很多时候我们都会遇到这个异常&#xff0c;我的场景是与mybatis有关&#xff0c;若看客不是此类情形&#xff0c;仅做参考即可。 二、异常提示 Caused by: java.lang.NoSuchFieldError: ASSIGN_IDat com.baomidou.mybatisplus.core.config.GlobalConfig$DbConf…

基于cifar-10的图像分类

一、 背景 CIFAR-10 数据集由 10 类中的 60000 张 32x32 彩色图像组成&#xff0c;每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。数据集分为五个训练批次和一个测试批次&#xff0c;每个批次有 10000 张图像。测试批次包含来自每个类的 1000 个随机选择的图像。…

国创证券|新手建议不要买哪些股票?新手股票避雷!

出资者在进行股票生意之前&#xff0c;对股票的选择也是一种很重要的环节&#xff0c;特别是对于新手出资者来说&#xff0c;很简单踩雷。那么新手主张不要买哪些股票&#xff1f;下面就由国创证券为我们分析&#xff1a; 新手主张不要买哪些股票&#xff1f; 1、业绩差的股票…