详解设计模式:适配器模式

news2024/11/25 10:58:11

适配器模式(Adapter Pattern)又称为变压器模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作

~

本篇内容包括:关于适配器模式、适配器的实现 Demo


文章目录

    • 一、关于适配器模式
        • 1、关于适配器模式
        • 2、关于适配器模式的构成
        • 3、关于适配器模式的UML
        • 4、关于适配器类
        • 5、关于适配器模式的优缺点
    • 二、适配器的实现 Demo
        • 1、Demo 设计
        • 2、Demo 实现
        • 3、Demo 测试


一、关于适配器模式

1、关于适配器模式

适配器模式(Adapter Pattern)又称为变压器模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作

2、关于适配器模式的构成

适配器模式一般包含三种角色:

  1. 目标(Target):目标是一个接口,该接口是客户想要使用的接口。
  2. 被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要被适配。
  3. 适配器(Adapt):适配者是一个类,该类实现了目标接口并包含有适配者的引用,即适配者的职责是对被适配者接口(抽象类)与目标接口进行适配。

3、关于适配器模式的UML

适配器模式

4、关于适配器类

public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        //...一些操作...
        super.adapteeRequest();
        //...一些操作...
    }
}

5、关于适配器模式的优缺点

# 适配器模式优点

  • 可以让任何两个没有关联的类一起运行。
  • 提高了类的复用。
  • 增加了类的透明度。
  • 灵活性好。

# 适配器模式缺点

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

# 使用场景

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

二、适配器的实现 Demo

1、Demo 设计

我们新买了一个华为 mate50 手机,但是来朋友家做客没携带充电器,朋友家只有 Ios 的充电器,所以我们需要让 Ios 充电接口支持我们的 mate50 的 Type-C 充电。

2、Demo 实现

# TypeCharger 目标(Target)

/**
 * Type-c充电接口
 **/
public interface TypecCharger {

    /**
     * 充电方法
     */
    void typecCharger();
}
 
/**
 * Type-c充电
 **/
public class Typec implements TypecCharger {
    
    @Override
    public void typecCharger() {
        System.out.println("Type-c接口充电");
    }
}

# IosCharger 被适配者(Adaptee)

/**
 * Ios充电接口
 **/
public interface IosCharger {
    /**
     * 充电方法
     */
    void iosCharger();
}
 
/**
 * Ios充电
 **/
public class Ios implements IosCharger {
    
    @Override
    public void iosCharger() {
        System.out.println("Ios接口充电");
    }
}

# FriendHome

/**
 * 在朋友家充电(只有Ios充电口)
 **/
public class FriendHome {
    private IosCharger iosCharger;

    public FriendHome(IosCharger iosCharge) {
        this.iosCharger = iosCharge;
    }

    /**
     * 充电
     */
    public void charge(){
        this.iosCharger.iosCharger();
    }
}

# ChargerAdapter 适配器(方式一)

/**
 * 适配器接口
 **/
public class ChargerAdapter implements IosCharger {
    
    private TypecCharger typec;

    public ChargerAdapter(Typec typec) {
        this.typec = typec;
    }

    @Override
    public void iosCharger() {
        typec.typecCharger();
    }
}

# ChargerAdapter 适配器(方式二)

public class ChargerAdapter extends Typec implements IosCharger {

    @Override
    public void iosCharger() {
        this.typecCharger();
    }
    
}

3、Demo 测试

public class Client {

    public static void main(String[] args) {
        // 原本只有 Ios 充电口
        FriendHome home = new FriendHome(new Ios());
        home.charge();

        System.out.println("*******************");

        // 使用适配器之后旅馆支持ios充电了
        ChargerAdapter chargerAdapter = new ChargerAdapter(new Typec());
        home = new FriendHome(chargerAdapter);
        home.charge();
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双十二选什么牌子的led台灯质量好?2022最新几款真的能护眼的台灯推荐

说到led台灯,那么护眼灯必然是不能忽视的存在,现在市面上的大多数护眼台灯都是使用led灯珠作为发光源,这不仅是因为其高效节能、绿色环保的特性,更重要的是具有很多种保护眼睛的效果。 比起传统的卤素灯或者白炽灯,led…

计算机程序语言的执行过程(个人简单理解)

各种程序语言都只能转换为“机器语言”才能执行 现在的编程语言多种多样,例如,汇编语言;c语言;c,Java,python 语言发展的过程 除了机器语言外,其他语言转换为二进制机器语言 这里要明白两种将…

R语言深度学习不同模型对比分析案例

介绍 深度学习是机器学习最近的一个趋势,模拟高度非线性的数据。在过去的几年中,深度学习在各种应用中获得了巨大的发展势头(Wikipedia 2016a)。其中包括图像和语音识别,无人驾驶汽车,自然语言处理等等。 …

Allegro输出带等长规则的Excel操作指导

Allegro输出带等长规则的Excel操作指导 Allegro可以输出带等长规则的Excel文件,方便检查和查阅,具体操作如下 打开规则管理器 选择Relative Propagation Delay 选择需要输出的match group-expand展开所有规则 菜单选择Tool-Excel 出现一个对话框,选择Active worksheet,…

德国质量链接中国速度,奥迪一汽新能源汽车有限公司在电动化赛道上全速奔跑

(图片一:奥迪一汽新能源汽车有限公司经管会成员暖封闭启动仪式环节合影) 长春,2022年11月21日——11月21日,奥迪一汽新能源汽车有限公司举行了伙伴共进暨暖封闭仪式。随着暖封闭的顺利完成,奥迪一汽新能源…

JAVA并发编程--4.1理解Condition

背景:Condition 多线程条件并发控制,与Lock配合可以实现等待/通知模式; 1 condition 使用demo(生产者与消费者模型): package org.lgx.bluegrass.bluegrasscoree.util.testcondition;import java.util.Ar…

java 每日一练 (5)

java 每日一练(5) 文章目录单选不定项选择题编程题单选 1.下面的程序 编译运行后,在屏幕上显示的结果是() A: 0 B : 2 C: 5 D :80 5的二进制 : 0101   右移 >>: 最右侧位不…

_gdb和进程概念

gdb 在windows下的vs2013下,我们可以进行调试,方便我们了解程序的具体的运行步骤和存在的问题,那么在Linux中,也存在这样一种调试机制,gdb就是在Linux系统下的调试指令。 Linux下和Windows下的调试的区别 答&#x…

如何在保证身份安全的同时提升员工体验

自疫情以来越来越多的企业员工的工作方式都发生了改版。远程和线上下混合工作形式已经成了新常态,企业员工希望随时随地都能访问其工作资源。而且为了方便办公他们更希望使用多种设备(甚至是个人设备)来访问公司数据。 运维有小邓 在如此复杂…

网上商城购物系统设计与实现(Java+Web+SSM+MySQL)

目 录 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 开发工具及技术 1 2 需求分析 3 2.1 功能需求分析 3 2.1.1 网站前台功能 3 2.1.2 网站后台功能 3 2.2 性能分析 3 2.3 系统用户用例图 4 3 系统设计 5 3.1 系统的总体设计 5 3.2 数据库的分析与设计 5 3.2.1数据库概念设计…

DDR PCB设计布线时,拓扑结构的选择

在PCB设计时我们在处理DDR部分的时候都会进行一个拓扑的选择,一般DDR有T点和Fly-by两种拓扑结构,那么这两种拓扑结构的应用场景和区别有哪些呢? T点拓扑结构:CPU出来的信号线经过一个过孔后分别向两边进行连接,分叉点一般在信号的…

哪款蓝牙耳机打电话好用?打电话用的蓝牙耳机推荐

我们需要集中精神,闹中取静。特别是工作或者学习的时候,为了让意志力力更加集中,提高工作或者学习的效率,或是对于一个热爱音乐的人来说,蓝牙耳机肯定是必不可少的;蓝牙耳机现在的功能有很多,质…

锐捷交换机系统安装与升级

锐捷交换机系统安装与升级 文章目录锐捷交换机系统安装与升级一、实验步骤二、实验实施1、到锐捷官网下载交换机型号对应的系统文件2、配置本机IP,与将要升级设备互联3、打开文件中的TFTPserver4、进入BOOT模式恢复系统交换机在MGMT的情况下,通过MGMT口来…

主数据管理系统mdm哪个产品好,为什么,越详细越好?

当企业对主数据管理不善时,会出现数据冗余、数据不一致、业务低效、数据孤岛等问题,多个系统之间的数据难以协调,难以发挥数据的价值。这时我们就需要对企业主数据进行管理。 亿信华辰前不久在“2022中国数字经济创新发展大会”上荣获“2022年…

艾美捷QuickTiter 逆转录病毒定量试剂盒的制备方案

Cell Biolabs艾美捷QuickTiter逆转录病毒定量试剂盒提供了一种测定逆转录病毒滴度的快速方法。该测定法测量逆转录病毒的病毒核酸含量,可以在纯化病毒之前或之后进行。 试剂的制备: •1X QuickTiter™ 解决方案C:准备1X QuickTiter™ 溶液C通…

[Linux] 常用命令--文件操作grep/nl/more/less/head tail/set

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——将文件上传至云服务器

使用七牛云,首先进行注册,注册之后认证。 https://www.qiniu.com 登录七牛云 查看手册 存储的时候使用对象存储 SDK 存储空间 域名30天,到期后重新创建 具有独立域名可以绑定域名。 再创建一个空间为community_share 在项目中引用七牛云 首先…

python的继承知识点总结

python继承,python丰富的类因为继承而变得多姿多彩,如果语言不支持继承,那么类就没什么优势。 1、首先我们来定义两个类 一个dog类,一个bird类class Dog: def sleeping(self): print (dog 正在睡觉) def speaking(…

指纹浏览器是什么?可以用来解决广告投放的什么问题?

说到指纹浏览器,相信很多跨境电商人都不陌生,但是很多小伙伴不知道的是,指纹浏览器对于广告投放来说也是非常有帮助的工具!为什么呢?今天,东哥就跟大家聊一聊指纹浏览器到底为什么适合用于广告投放和广告营…

项目管理中,项目干系人的角色和责任

项目干系人是指企业内部或外部的团体、单位、个人或组织,他们受到项目结果的影响,或能够影响到项目的结果。主要干系人是干系人的一个子集,由于他们直接受到项目结果变化的影响,如果他们的支持被撤回,将导致项目失败。…