首页 > 其他分享 >学习记录-适配器模式

学习记录-适配器模式

时间:2023-01-11 22:34:14浏览次数:54  
标签:String 记录 适配器 接口 Speaker 模式 public speak

适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,它不会改变原先的接口。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

介绍

意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。

何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

如何解决:继承或依赖(推荐)。

关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。

应用实例: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 jdbc。

优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。

缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

实现

类图

image-20230111202830188

代码实现

public class Main {
    public static void main(String[] args) {
        //我们客户方去调用的时候呢,它就可以直接调用适配器
        //然后传入一个Speaker对象,接着通过translate,及手语的获取,而不需要直接去调用speak方法了
        String result = new Adapter(new Speaker()).translate();
        System.out.println(result);
    }


    //首先我们定义一个主持人,Speaker
    //注:这里static修饰知识因为在main函数里调用了相关函数,并无其它意义。
    static class Speaker {
        //他有一个方法Speak,表示传达信息
        public String speak() {
            return "China No.1";
        }
    }

    //但是我们的观众呢是聋哑人,没办法通过Speak获取信息
    //那我们可以通过中间件即适配器,去充当桥梁,让它们能够兼容
    //首先我们定义适配器接口,即适配器需要实现哪些方法
    interface Translator {
        //这里我们定义一个translate方法
        public String translate();
    }

    //我们如何调用那个被适配的对象呢,可以通过类继承或者关联使用的方式实现
    //这里通过关联使用的方式实现
    //注:这里static修饰知识因为在main函数里调用了相关函数,并无其它意义。
    static class Adapter implements Translator {
        private Speaker speaker;

        public Adapter(Speaker speaker) {
            this.speaker = speaker;
        }

        //在这里我们可以通过先调用Speaker的speak方法去获取内容
        //然后再通过手语去获取信息并做好翻译(这里简单实现)
        //最后返回
        @Override
        public String translate() {
            String speak = speaker.speak();
            String result = "理解、手语话等操作:" + speak;
            return result;
        }
    }
}

运行结果

理解、手语话等操作:China No.1

此文章参考:

【菜鸟教程】:https://www.runoob.com/design-pattern/adapter-pattern.html

【五分钟学设计模式.06.适配器模式-哔哩哔哩】: https://b23.tv/akZGuEu

标签:String,记录,适配器,接口,Speaker,模式,public,speak
From: https://www.cnblogs.com/galo/p/17045090.html

相关文章

  • 设计模式(二)----软件设计原则
    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,要尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。1、单一......
  • 路由传参,路由重定向和模式,编程式导航,编程式导航传参
    路由传参先配置好路由在父组件种添加<template><divclass="footer_wrap"><!--头部点击--><div><router-linkto="/practice1">点击测试1</router......
  • 玩转Vben Admin第2改:配置权限模式
    Vben设计了2种权限模式,分别是【前端角色权限(ROLE)】和【后端动态获取(BACK)】 详细说明请参考https://doc.vvbin.cn/guide/auth.html为了打造【轻前端重后端】我们希望......
  • 学习记录-装饰器模式
    装饰器模式装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式......
  • 【编程】大端小端模式
    一句话:低位的数据保存到高位上,就是装大尾巴狼,就是大端。 数据:11223344(尾端是44)保存在寄存器:(左边是高地址)44332211  (右边是低地址) --大端保存在寄存器:(左边是高地址......
  • 网络流 24 题做题记录
    网络流24题做题记录P3254圆桌问题源点连单位,容量为单位人数,桌子连汇点,容量为桌子容量,各单位连各桌子,容量为\(1\),因为每个单位在每张桌子上最多\(1\)人,跑最大流。P......
  • buuctf-preg_replace的e模式造成命令执行
    [BJDCTF2020]ZJCTF,不过如此打开后是正常的代码审计首先第一眼看到的就是file_get_contents而且还对$text有要求,直接上伪协议data://text/plain,Ihaveadream,同时按照......
  • linux一次安装chromedrive记录
    先查看已安装的chrome版本[root@iZ8vbeixmmd1ntxae9oe19Z~]#google-chrome--versionGoogleChrome109.0.5414.74[root@iZ8vbeixmmd1ntxae9oe19Z~]#没有安装需......
  • JavaScript严格模式(use strict)
    一、什么是严格模式(strictmode)JavaScript严格模式即在严格模式下运行。严格模式下,你将不能使用未声明的变量。注意,严格模式需要浏览器的支持:Internetexplorer10+、Fire......
  • RDD如何分区,各种模式下的分区数目是怎样的?
    在分布式程序中,网络通信的开销是很大的,因此控制数据分布以获得最少的网络传输开销可以极大地提升整体性能.​​Spark​​程序可以通过控制RDD分区方式来减少通信开销。Spar......