大话设计模式——10.适配器模式(Adapter Pattern)

简介

将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
UML图:
在这里插入图片描述

应用场景
  • 系统需要使用现有的类,而这些类的接口不符合系统的需要
  • java中的JDBC、InputStreamReader
示例

翻译员的主要工作也即是让语言不相同的人群也可以进行交流和沟通

  1. 对外的接口
public interface YesOrNotLanguage {

    void sayYes();

    void sayNo();
}
public class American implements YesOrNotLanguage {

    @Override
    public void sayYes() {
        System.out.println("Yes!!!");
    }

    @Override
    public void sayNo() {
        System.out.println("No!No!");
    }
}
public class Chinese {

    public void 是的() {
        System.out.println("是的");
    }


    public void 不儿() {
        System.out.println("不儿,不儿");
    }
}
  1. 适配器:翻译
public class Translator implements YesOrNotLanguage {


    private Chinese chinese;

    public Translator(Chinese chinese) {
        this.chinese = chinese;
    }

    @Override
    public void sayYes() {
        chinese.是的();
    }

    @Override
    public void sayNo() {
        chinese.不儿();
    }
}
  1. 运行
public class Main {

    public static void main(String[] args) {
        YesOrNotLanguage american = new American();
        american.sayYes();
        YesOrNotLanguage translator = new Translator(new Chinese());
        translator.sayYes();
        american.sayNo();
        translator.sayNo();

    }
}

在这里插入图片描述

示例2

将一些类转换成满足另一个新接口的类

  1. 目标类:需要有与要适配的类相同的方法进行覆盖重写
public interface NewCharger {


    void highSpeed();

    void mediumSpeed();

    // 需要有与要适配的类相同的方法进行覆盖重写
    void slowSpeed();

}
  1. 适配类
public class OldCharger {

    public void slowSpeed(){
        System.out.println("10w 快充");
    }
}
  1. 适配器
public class ChargeAdaptor extends OldCharger implements NewCharger {

    @Override
    public void highSpeed() {
        System.out.println("120w 快充");
    }

    @Override
    public void mediumSpeed() {
        System.out.println("60w 快充");
    }
}
  1. 运行
public class Main {

    public static void main(String[] args) {
        NewCharger chargeAdaptor = new ChargeAdaptor();
        chargeAdaptor.slowSpeed();
        chargeAdaptor.mediumSpeed();
        chargeAdaptor.highSpeed();
    }
}

在这里插入图片描述

总结

好处:

  • 可以让任何两个没有关联的类⼀起运行,使得原本接口不兼容的类也可以一起工作
  • 提高代码可复用性和灵活性

缺点:

  • 增加了整体的调用链路

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

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

相关文章

解决Android Studio Loading Devices问题

目录 一、解决办法(普通): 二、解决办法的优化 三、解决办法的进一步优化 问题:windows 11 电脑,每次开机,打开Android Studio,都会显示Loading Devices,连接不上设备。 原因:adb…

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生,理论滚瓜烂熟,八股天花乱坠,但是大家有多少在代码中实践过呢?很多人在实际开发中可能就用用Async,new Thread()。线程池也很少有人会自己去建,默认的随便用用。在工作中大家对…

STL--list如何实现元素的插入和删除

在C标准模板库(STL)中,std::list 是一个双向链表。由于它的双向链表特性,std::list 支持在任何位置高效地插入和删除元素。 元素插入: ●使用 push_back() 在列表尾部添加元素; ●使用 push_front() 在列表…

hadoop分布式计算组件

什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果 分布式计算:多台服务器协同工作,共同完成一个计算任务 分布式计算常见的2种工作模式 分散->汇总(MapReduce就是这种模式)中心调…

在NBA我需要翻译--适配器模式

1.1 在NBA我需要翻译! "你说姚明去了几年,英语练出来了哦,我看教练在那里布置战术,他旁边也没有翻译的,不住点头,瞧样子听懂没什么问题了。" "要知道,最开始&#xff0c…

(学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…

设计方案:914-基于64路AD的DBF波束形成硬件

一、硬件概述 DBF技术的实现全部是在数字域实现,然而天线阵列接收的信号经过多次混频后得到的中频信号是模拟信号,实现DBF处理并充分发挥DB&…

[C++][算法基础]模拟堆(堆)

维护一个集合,初始时集合为空,支持如下几种操作: I x,插入一个数 x;PM,输出当前集合中的最小值;DM,删除当前集合中的最小值(数据保证此时的最小值唯一)&…

【LeetCode热题100】153. 寻找旋转排序数组中的最小值(二分)

一.题目要求 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7…

Flutter应用发布前的关键iOS设备测试策略

大家好,我是咕噜铁蛋!今天我想和大家分享一下关于Flutter应用在发布前,如何进行关键iOS设备测试的策略。随着移动应用的普及,Flutter作为一种跨平台的开发框架,越来越受到开发者的青睐。但是,跨平台也意味着…

10 Python进阶:MongoDB

MongoDb介绍 MongoDB是一个基于分布式架构的文档数据库,它使用JSON样式的数据存储,支持动态查询,完全索引。MongoDB是NoSQL数据库的一种,主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势&a…

蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 思路: 由于我第一写没考虑到大数据的原因,直接判断导致只得了40分,下面是我的代码: #…

4.7 IO day6

1&#xff1a;有一个隧道&#xff0c;全长5公里&#xff0c;有2列火车&#xff0c;全长200米&#xff0c; 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行) #include <stdio.h> #include <string.…

1、java语法入门(找工作版)

文章目录 一、Java简介二、Java常量与变量1、标识符2、关键字3、变量4、类的命名规则5、数据类型6、基本数据类型字面值7、变量的定义与初始化8、ASCII码和Unicode编码9、转义字符10、类型转换11、常量 三、Java运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、…

C#/.NET/.NET Core推荐学习书籍(24年4月更新,已分类)

前言 古人云&#xff1a;“书中自有黄金屋&#xff0c;书中自有颜如玉”&#xff0c;说明了书籍的重要性。作为程序员&#xff0c;我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍&#xff08;包含了C#、.NET、.NET Core、Linq、EF/E…

瓦拉纳西(Varanasi)宗教重要性历史与文化旅游与经济社会生活环境挑战“赶due”赶due的特点包括:赶due的应对策略:陶行知生平简介教育实践与贡献

目录 瓦拉纳西&#xff08;Varanasi&#xff09; 宗教重要性 历史与文化 旅游与经济 社会生活 环境挑战 “赶due” 赶due的特点包括&#xff1a; 赶due的应对策略&#xff1a; 陶行知 生平简介 教育实践与贡献 教育思想 遗产与影响 1.澳洲限制半工半读&#xff…

SQL Sever 2008 安装教程

先从官网下载程序&#xff1a;下载地址 打开上述链接后&#xff0c;点击下载按钮。 就会跳出下面这个界面&#xff0c;如果你的电脑是64位的请选择下图中这两个程序。 下载完成后&#xff0c;在电脑磁盘中找到这两个文件&#xff0c;注意安装的顺序&#xff0c;先安装 SQLEXPR…

H5 点击图片翻转效果

需求 ☑ h5 实现点击图片得到的是放大的镜像图片&#xff08;不是放大镜效果 而是实现图片镜像对折&#xff0c;左右翻转&#xff09; ☑ 鼠标点击后原图消失/隐藏&#xff0c;在原来的位置上取而代之的是翻转后的图&#xff08;除了翻转之外不要改变其他的性质&#xff0c;比…

如何保证全部流量走代理

最近因为某些原因&#xff0c;需要做一些确保高匿的事情&#xff0c;便花时间做了一定的调研&#xff0c;至于是什么事情这里不便多说。 本文主要还是聊聊我看到的一些使用代理软件误区和确保流量全部走代理的方法&#xff0c;甚至也可以说是Proxifier的用户使用手册&#xff…