设计模式:结构型模式-----适配器模式

2023-10-27

1.概述
将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的兼容性问题。

示例:生活中的适配器(即充电器),将220v的交流电转换为手机可以接受的直流电。

2.分类
a.类的适配器模式
当希望一个类转换成满足另一个新接口的类时,可以创建一个适配器类,持有原有类的一个实例,在适配器类的方法中,调用实例的方法就行。

b.对象的适配器模式
当希望一个对象转换成满足另一个新接口的对象时,可以创建一个适配器类,持有原有类的一个实例,在适配器类的方法中,调用实例的方法就行。

c.接口的适配器模式
当不希望实现一个接口中的所有方法时,可以创建一个抽象类,空实现所有接口方法,当我们要使用该接口的某一个方法时直接继承抽象类即可。

应用实例:生活中的手机适配器(即充电器),将220v的交流电转换为手机可以接受的直流电。

Target.java

package demo_adapter01;

//目标接口:220v交流电
public interface Target {
	public void request();
}

TargetImpl.java

package demo_adapter01;

//目标接口的实现类:220v交流电
public class TargetImpl implements Target{

	@Override
	public void request() {
		System.out.println("手机将接收220v交流电");
	}
	
}

Adapatee.java

package demo_adapter01;

//被适配类:手机可以使用的直流电
public class Adapatee {
	public void adapterRequest() {
		System.out.println("手机将接收其可以使用的直流电");
	}
}

Adapater.java

package demo_adapter01;

//适配器类:将220v交流电转换为手机可以使用的直流电
//继承被适配类且实现目标类的接口
public class Adapater extends Adapatee implements Target{

	@Override
	//在目标接口类的方法中调用被适配者的方法
	public void request() {
		super.adapterRequest();
	}
	
}

Test.java

package demo_adapter01;

public class Test {

	public static void main(String[] args) {
		//1.正常使用目标类的方法
		Target target=new TargetImpl();
		System.out.println("若不使用适配器去给手机充电!");
		target.request();
		
		//2.通过适配器类来使用目标类的方法
		Target targetAdapater=new Adapater();
		System.out.println("使用适配器去给手机充电!");
		targetAdapater.request();
	}

}

运行结果图
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式:结构型模式-----适配器模式 的相关文章

  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • 设计模式-单一职责原则介绍与理解

    描述 一个类应该专注于实现一个功能 好处 便于代码复用 举例 俄罗斯方块游戏 首先可以想到的是游戏逻辑与界面的分离 也就是说逻辑一个类 界面部分一个类 这样做的好处就是我们可以复用游戏逻辑的代码 例如我们用java写了一个基于PC端的俄罗斯
  • 设计模式之(三)---工厂方法模式

    女娲补天的故事大家都听过吧 这个故事是说 女娲在补了天后 下到凡间一看 哇塞 风景太优美了 天空是湛 蓝的 水是清澈的 空气是清新的 太美丽了 然后就待时间长了就有点寂寞了 没有动物 这些看的到 都是静态的东西呀 怎么办 别忘了是神仙呀 没
  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • 面向过程和面向对象的语言有哪些,以及优缺点(一篇文章让你理解)

    C语言是面向过程的 而C python java是面向对象的 面向过程的编程思想将一个功能分解为一 个一个小的步骤 我们通过完成一个一 个的小的步骤来完成一个程序 优点 这种编程方式 符合我们人类的思维 编写起来相对比较简单 缺点 但是这种
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式七大原则

    1 设计模式的目的 编写软件过程中 程序员面临着来自耦合性 内聚性以及可维护性 可扩展性 重用性 灵活性 等多方面的挑战 设计模式是为了让程序 软件 具有更好 1 代码重用性 即 相同功能的代码 不用多次编写 2 可读性 即 编程规范性 便
  • 分享几个项目中用到的设计模式

    前言 之前项目中出于扩展性和有雅性的考虑 使用了多种设计模式进行项目框架的设计 主要的一些设计模式是单例模式 工厂模式 策略模式 责任链模式 代理模式这几种 现在依次讲讲这几个的主要是实现方式和在我们项目中的应用场景 核心设计模式分享 单例
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • [C++]外观模式

    外观模式 Facade Pattern 隐藏系统的复杂性 并向客户端提供了一个客户端可以访问系统的接口 这种类型的设计模式属于结构型模式 它向现有的系统添加一个接口 来隐藏系统的复杂性 这种模式涉及到一个单一的类 该类提供了客户端请求的简化
  • Java设计模式之装饰者设计模式Decorator Pattern

    目录 一 基本概念 二 结构 1 图示 三 案例演示 被装饰对象的基类 一个接口 有cost 和description 两个抽象方法 具体被装饰的对象 实现上面这个接口 装饰者抽象类 基类 实现drink接口 具体的装饰者类 糖 具体装饰者
  • 程序员必知的23种设计模式之组合模式

    文章目录 1 模式引出 学校院系展示需求 1 1 传统方案 1 2 传统方案问题分析 2 组合模式基本介绍 2 1 方案修改 3 组合模式解决的问题 4 组合模式的注意事项和细节 1 模式引出 学校院系展示需求 编写程序展示一个学校院系结构
  • 设计模式之访问者模式

    访问者模式 把被操作的对象作为元素 可变可拓展的操作作为访问者 可以说访问者中有很多操作 然后访问者访问元素 对该元素进行操作 不同的访问者有不同的操作 案例 定义访问者接口 public interface UniversalVisito
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

    文章目录 一 进行面向对象设计 1 划分职责 gt 需要有哪些类 2 定义类及其属性和方法 3 定义类与类之间的交互关系 4 将类组装起来并提供执行入口 二 如何进行面向对象编程 1 接口实现

随机推荐

  • Python110道常见面试题

    干货 110 道 Python 面试笔试题超强汇总 这几天好多留言问有没有Python面试题 今天统一给大家分享一遍 希望能帮助此时仍在找工作的同学 尽快找到工作 希望对基本知识不熟悉的同学 能认真做一遍 肯定会有不少收获 1 一行代码实现
  • DB2时间戳查看

    1 打开日志 确定错误是那个数据库操作造成 2 查看bnd文件的时间戳信息 db2bfd b Card bnd grep Timestamp 显示时间戳 Timestamp tA5MPfMZ 2009 12 31 15 12 56 45 3
  • linux服务器下手动删除memcache中的key对应的value

    假设服务器ip是 10 0 0 1 端口是 1234 首先连上服务器 telnet 10 0 0 1 1234 查看某个key对应的值 假设key的名称为 type get type 获取值 delete type 删除
  • Anaconda下pip离线安装Pytorch(亲测可用)

    win10 Anaconda3 python3 7 CUDA10 进入pytorch官网https pytorch org 根据自己情况选择安装 注意 我并没有在Anaconda Prompt下直接输入Run this Comman的内容
  • 2023年十大最佳自动化测试工具

    Best Automation Testing Tools for 2023 对更快交付高质量软件 或 快速质量 的需求要求组织以敏捷 持续集成 CI 和DevOps方法论来寻找解决方案 测试自动化是这些方面的重要组成部分 最新的 2018
  • ContentProvider与ContentResolver

    1 理解ContentProvider与ContentResolver 看下面这个图就行了 2 ContentProvider可以直接理解为一个public的servlet类 里面 封装了一些public 的函数 这个函数可以操作数据库 文
  • C++11 并发指南三(Lock 详解)

    C 11 并发指南三 Lock 详解 文章目录 C 11 并发指南三 Lock 详解 std lock guard 介绍 std lock guard 构造函数 std unique lock 介绍 std unique lock 构造函数
  • 深入理解Java虚拟机(四)Eden、Survivor、老年代、GC日志

    1 年轻代 1 1 Eden区和Survivor区 新生代GC Minor GC 指发生在新生代的垃圾收集动作 Minor GC非常频繁 新生代采用复制算法 一般回收速度也比较快 因为采用复制算法 所以年轻代分为三部分 1个Eden区和2个
  • java string default values_@RequestParam使用defaultValue属性设置默认值的操作

    RequestParam使用defaultValue属性设置默认值 注意设置必须是string类型的 框架自己会做转换 RequestParam value page required false defaultValue 1 Intege
  • Window窗体属性的基础简述

    Window窗体属性 1 窗口的外观 WPF中默认窗口框架的外观 主要取决于Icon Title WindowStyle ResizeMode等属 性 Icon 指定窗口的图标 Title 指定窗口的标题 WindowStyle指定窗口样式
  • jetson tx2 上部署TensorRT模型推理

    参考 https arleyzhang github io articles 7f4b25ce 1 Jetson tx2 是什么 Jetson tx2简而言之就是AI计算终端 采用 NVIDIA Pascal 构架 外形小巧 节能高效 非常
  • [Matlab]巴特沃夫滤波器设计:低通、高通、带通和带阻

    巴特沃斯滤波器的特点 1 通频带内的频率响应曲线最大限度平坦 没有起伏 而在阻频带则逐渐下降为零 2 在振幅的对数对角频率的波特图上 从某一边界角频率开始 振幅随着角频率的增加而逐步减少 趋向负无穷大 测试代码 ButterWorthFil
  • 如何把图纸转换为t3格式_怎么把图纸转换成t3格式

    cad转化成t3格式 1 打开天正 cad 3 找到图纸保存的位置 点击点开 5 选择输出类型 输入 3 8 2020 05 27 42人浏览 在CAD看图中如何将图纸转成T3格式 浩辰 CAD 看图王官方页面 http yun gstar
  • git命令基本使用(拉取,上传)

    项目从git上通过SSH拉取或上传 1 初始化文件 git init 2 绑定账号的用户名 git config global user name shopping lby 3 绑定账号的邮箱 git config global user
  • 一篇就让你了解进程的虚拟地址与物理地址是如何进行映射的

    这篇文章可以让你了解进程的虚拟地址是如何映射物理地址的 在刚开始接触虚拟地址的概念时 真的是一头雾水 不知道它到底是个什么东西 一直有这个疑惑 为什么要用虚拟地址 虚拟地址的作用是什么 经过这么多年做过的项目 积攒经验后 我可以略知一些虚拟
  • 矩阵乘法

    题目描述 计算两个矩阵的乘法 n m阶的矩阵A乘以m k阶的矩阵B得到的矩阵C 是n k阶的 且C i j A i 0 B 0 j A i 1 B 1 j A i m 1 B m 1 j 输入 第一行为n m k 表示A矩阵是n行m列 B矩
  • 愿每一个人的创造力都能被激发:剪映Mac版来了!

    在移动端上线18个月后 剪映有了PC版 11月27日 视频创作工具剪映正式推出Mac专业版 Windows版计划于明年2月上线 去年秋天 剪映的移动端上线3个月即登顶App Store中国区免费榜 本着打造简单好用的产品 降低视频创作门槛的
  • 攻防世界web进阶区--php_rce write up

    打开靶机 这道题没有什么难点 重点在于RCE的认识和thinkphp的漏洞 那RCE是什么嘞 RCE 远程代码执行漏洞 远程命令 代码执行漏洞 简称RCE漏洞 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码 从而控制后台系统 RC
  • 正交矩阵

    正交性 是从几何学中借来的术语 如果两条直线相交成直角 它们就是正交的 比如图中的坐标轴 用向量术语说 这两条直线互不依赖 沿着某一条直线移动 你投影到另一条直线上的位置不变 在计算技术中 该术语用于表示某种不相依赖性或是解耦性 如果两个或
  • 设计模式:结构型模式-----适配器模式

    1 概述 将某个类的接口转换成客户端期望的另一个接口表示 目的是消除由于接口不匹配所造成的兼容性问题 示例 生活中的适配器 即充电器 将220v的交流电转换为手机可以接受的直流电 2 分类 a 类的适配器模式 当希望一个类转换成满足另一个新