适配器Adapter

2023-10-27

1.意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2.结构
类适配器结构图
类适配器结构图
对象适配器结构图
对象适配器结构图
类适配器使用多重继承对一个接口与另一个接口进行匹配。对象适配器依赖于对象组合。
Target定义Client使用的与特定领域相关的接口。
Client与符合Target接口的对象协同。
Adaptee定义一个已经存在的接口,这个接口需要适配。
Adapter对Adaptee的接口与Target接口进行适配。
3.适用性:
想使用一个已经存在的类,而它的接口不符合要求。
想创建一个可以服用的类,该类可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
(仅适用于对象Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
代码案例
某软件系统中,已设计并实现了用于显示地址信息的类Address,现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求。
软件设计师考试2016年上半年下午题第6题

public class Adapter {
    public static void main(String[] args) {
        Address addr = new Address();
        DutchAddressAdapter addrAdapter = new DutchAddressAdapter(addr);
        System.out.println("The DutchAddress \n");
        testDutch(addrAdapter);
    }
    private static void testDutch(DutchAddress addr){
        addr.straat();
        addr.postcode();
        addr.plaats();
    }
}

class Address{
    public void street(){
        System.out.println("Address.street()");
    }
    public void zip(){
        System.out.println("Address.zip()");
    }
    public void city(){
        System.out.println("Address.city()");
    }
}
class DutchAddress{
    public void straat(){
        System.out.println("DutchAddress.straat()");
    }
    public void postcode(){
        System.out.println("DutchAddress.postcode()");
    }
    public void plaats(){
        System.out.println("DutchAddress.plaats()");
    }
}
class DutchAddressAdapter extends DutchAddress{
    private Address address;
    public DutchAddressAdapter(Address addr){
        address = addr;
    }
    public void straat(){
        address.street();
    }
    public void postcode(){
        address.zip();
    }
    public void plaats(){
        address.city();
    }
}

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

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

适配器Adapter 的相关文章

  • C++设计模式(8)——命令模式

    命令模式 亦称 动作 事务 Action Transaction Command 意图 命令模式是一种行为设计模式 它可将请求转换为一个包含与请求相关的所有信息的独立对象 该转换让你能根据不同的请求将方法参数化 延迟请求执行或将其放入队列中
  • 设计模式——Visitor(访问者)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 Java实际应用举例 以ASM技术为例 4 1 被访问对象 ClassReader 4 2 Visitor ClassVisitor 4 3 具体visitor
  • 常用设计模式总结

    设计模式的相关知识 很多书籍和博客中都有详细总结 本文总结的目的 1 将自己学习到的设计模式的知识按照自己的逻辑重新总结 方便查看和记忆 2 方便让自己对设计模式中常用的知识有一个系统的认知 设计模式 话设计模式 书中提到 24 种设计模式
  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • 设计模式之享元模式

    一 背景 在面向对象程序设计过程中 有时会面临要创建大量相同或相似对象实例的问题 创建那么多的对象将会耗费很多的系统资源 它是系统性能提高的一个瓶颈 例如 围棋和五子棋中的黑白棋子 图像中的坐标点或颜色 局域网中的路由器 交换机和集线器 教
  • java需会(转载)

    一 基础篇 1 1 Java基础 面向对象的特征 继承 封装和多态 final finally finalize 的区别 Exception Error 运行时异常与一般异常有何异同 请写出5种常见到的runtime exception i
  • 简单工厂模式

    简单工厂模式 一 概念 从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫做静态工厂方法 StaticFactory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简
  • 行为型模式-状态模式

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

    定义 software entities like classes modules and functions should be open for extension but closed for modifications 一个软件实体
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • 设计模式一之简单工厂模式

    生活示例 刻板印刷 gt 活字印刷举例 喝酒唱歌 人生真爽 gt 对酒当歌 人生几何 可维护 需要修改 则只需要改需要改的字即可 可复用 字体可在后来的印刷复用 可扩展 需要加字 只需要加入相应的刻字即可 灵活性好 字的排列可能竖排或横排
  • 设计模式(十)装饰器模式

    装饰器模式是一种非常有用的结构型模式 它允许我们在不改变类的结果的情况下 为类添加新的功能 我们来举例说明一下 首先添加一组形状 它们都实现了形状接口 public interface Shape String getShape class
  • Java设计模式之装饰者设计模式Decorator Pattern

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

    访问者模式 把被操作的对象作为元素 可变可拓展的操作作为访问者 可以说访问者中有很多操作 然后访问者访问元素 对该元素进行操作 不同的访问者有不同的操作 案例 定义访问者接口 public interface UniversalVisito
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • Java监听器与观察者模式

    Java监听器与观察者模式 Java中的监听器 Listener 和观察者模式 Observer Pattern 都是用于处理对象间的事件通知和响应的设计模式 它们的目的是在对象之间建立一种松散的耦合 使得一个对象的状态变化可以通知到其他对
  • 设计模式—迭代器模式解析

    本文参考学习了 图解设计模式 中的代码实现和原理解释 迭代器模式 简介 Iterator 模式用于在数据集合中按照顺序遍历集合 就类似于我们的循环 一个个去遍历一个集合中的所有元素 示例代码 首先我们思考一个书本和书架的关系 显然 书架可以
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

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

随机推荐

  • Mock代理对象失效问题分析

    Mockito 简介 Mockito是一种常用的java单测框架 主要功能就是用来模拟接口的实现 对于测试环境无法执行的方法可以通过mock来执行我们定义好的逻辑 通常代码写法如下 public class AimServiceTest 将
  • http-2.4版本编译安装

    httpd 2 4版本新特性 1 mpm支持运行dos机制 2 支持event mpm 3 支持异步读写 4 支持每模块及每个目录分别使用各自的日志级别 5 每请求配置 6 增强版的表达式分析 7 支持毫秒级别的keeplivetimeou
  • Spring框架学习day_02:组件扫描 / 注解内部读解 / 组件扫描中配置作用域和生命周期 / 解耦 / 自动装配(两种方式) / 读取文件

    1 组件扫描 首先 必须让Spring扫描组件所在的包 并且 组件类的声明之前必须添加 Component注解 其实 除了 Component注解以外 还可以使用以下注解实现同样的效果 Controller 推荐添加在控制器类之前 Serv
  • C++泛型 显式实例化与显式具体化区别

    显式实例化 相当于通知编译器接下来我要使用这种数据类型的函数 显示的通知编译器生成对应的模板 以此和隐式的实例化相区别 隐式的实例化通过实参的类型来控制编译器对于通用函数模板相应类型的生成 而显式实例化为明文通知 实际效果上两者似乎并无太大
  • MARKDOWN使用方式

    这里写自定义目录标题 欢迎使用Markdown编辑器 红色字体 空格 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居
  • Spring Data Redis中的事务陷阱

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 79606551 王赛超 之前spring整合redis开启事务 在功能测试环境下跑了N天之后 突然发现服务异常 查看
  • pandas进阶修炼300题,全新上线!

    大家好 现在 经过一个多月的整理 全新的 pandas进阶修炼300题 来了 下面是一些介绍 文末可以免费下载 01 全新目录 新版pandas300题 按照操作分为 10大章节 每章均配有独立的真实数据 每个操作的习题在20 40题左右
  • STM32 系统(SysTick)定时器实验

    目录 SysTick 简介 SysTick 寄存器介绍 SysTick 定时时间计算 SysTick 定时实验 实验结果 SysTick 简介 SysTick 系统定时器是属于 CM3 内核中的一个外设 内嵌在 NVIC 中 系统定时器是一
  • quartus ii 生成.rbf的文件

    第一种方法 点击device and pin options 勾选raw binary file 这样在全编译之后就会生成 rbf的文件 在output fliles文件夹 不过这个产生的rbf文件是经过压缩的文件 在含ARM硬核的SoC
  • python中,用pyspark读写Hive数据

    1 读Hive表数据 pyspark读取hive数据非常简单 因为它有专门的接口来读取 完全不需要像hbase那样 需要做很多配置 pyspark提供的操作hive的接口 使得程序可以直接使用SQL语句从hive里面查询需要的数据 代码如下
  • 【华为OD】

    目录 一 题目描述 二 输入描述 三 输出描述 示例一 输入 输出 说明 示例二 输入 输出 说明 示例三 输入 输出 说明 四 Java玩法 一 题目描述 张兵和王武是五子棋迷 工作之余经常切磋棋艺 走了一会儿 轮到张兵了 他对着一条线思
  • 编译器预定义宏

    今天用MinGW http www mingw org 编译一个项目 怎么也想不起来用哪一个宏来判断用的是mingw的gcc编译器 不得以只好在头文件中搜索 找了半天终于发现是 MINGW32 后来我就想 有没有一个办法能把编译器的所有预定
  • MATLAB绘制二维和三维箭头

    实践中发现MATLAB没有直接绘制箭头 主要是二维 的函数 所以将自己绘制二维和三维箭头的解决方案和大家分享 如有错误或更高效的方法请大家留言指教 一 MATLAB绘制二维箭头 测试例子 drawArrow 1 1 7 2 绘制二维箭头函数
  • 使用OnScrollListener回调处理自动加载更多

    使用OnScrollListener回调处理自动加载更多 http blog csdn net fancylovejava article details 39369753
  • 【双系统】Windows10 查看电脑是UEFI+GPT还是Legacy+MBR模式的方法

    具体查看方法如下 1 按下Win R组合键 在运行窗口中输入cmd 点击确定 2 在弹出的窗口中输入diskpart 回车 3 在新弹出的窗口界面中输入list disk 回车 4 之后会显示下图的信息 Gpt下方如果有星号就表示是uefi
  • [1112]IDEA常用快捷键

    文章目录 IDEA中常用的快捷键 IDEA 利用Generate快速生成构建java类 1 首先定义 java类 的属性参数 2 右键 gt 选择 generate 3 出现 generate 面板 4 点击 construct 生成构造函
  • 开放内测!百度正式发布中国版ChatGPT

    最近 AI 真是火得没边了 OpenAI 靠着 ChatGPT 实力吸睛 Google 带着 Bard 紧随其后 就在昨天 GPT 4 模型又抢尽风头 你方唱罢我登场的 AI 领域 今天 轮到了百度了 就在今天下午 备受期待的百度文心一言如
  • 聪明的人脸识别4——Pytorch 利用Retinaface+Facenet搭建人脸识别平台

    睿智的目标检测51 Pytorch 利用Retinaface Facenet搭建人脸识别平台 学习前言 什么是Retinface和Facenet 1 Retinface 2 Facenet 整体实现代码 实现流程 一 数据库的初始化 二 检
  • Linux系统时间同步(ntpdate/chrony/rdate)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Linux下同步系统时间有rdate与ntpdate两种方法 chrony则是网络时间协议NTP的另一种实现 先确认是否安装 配置新服使用ntpdate同步系统时间 不论是
  • 适配器Adapter

    1 意图 将一个类的接口转换成客户希望的另外一个接口 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 2 结构 类适配器结构图 对象适配器结构图 类适配器使用多重继承对一个接口与另一个接口进行匹配 对象适配器依赖