首页 > 其他分享 >23种设计模式之适配器模式

23种设计模式之适配器模式

时间:2024-05-29 22:33:18浏览次数:13  
标签:23 适配 适配器 接口 void 设计模式 public 警灯

适配器模式

1、定义

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

2、适配器模式结构

  • Target(目标抽象类):定义客户所需要的接口,可以是一个抽象类或接口,也可以是具体类。在类适配器中,由于Java不支持多重继承,所以只能是接口。
  • Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。是适配器模式的核心。
  • Adaptee(适配者类):被适配的角色,它定义了一个已经存在的接口。一般是一个具体类,包含了客户希望使用的业务方法。
  • Client: 与符合Target接口的对象协同。

适配器模式结构图

3、示例代码

假设我们要开发一个警车类,有移动、警灯和鸣笛三个功能。现在已经有开发好的警灯类和警笛类,现在就需要一个适配器来让几个类能一起工作

Target 创建CarController抽象类,定义方法

public abstract class CarController {

    public void move() {
        System.out.println("移动");
    }

    public abstract void phonate(); //发出声音

    public abstract void twinkle(); //闪灯
}

Adaptee 需要被适配的警灯类和警笛类

public class PoliceSound {

    public void alarmSound() {
        System.out.println("鸣警笛");
    }
}
public class PoliceLamp {

    public void alarmLamp() {
        System.out.println("闪警灯");
    }
}

Adapter 适配器类PoliceCarAdapter

public class PoliceCarAdapter extends CarController{

    private PoliceLamp lamp;

    private PoliceSound sound;

    public PoliceCarAdapter() {
        lamp = new PoliceLamp();
        sound = new PoliceSound();
    }

    @Override
    public void phonate() {
        sound.alarmSound();
    }

    @Override
    public void twinkle() {
        lamp.alarmLamp();
    }
}

Client

public class Client {

    public static void main(String[] args) {
        CarController car = new PoliceCarAdapter();
        car.move();
        car.phonate();
        car.twinkle();
    }
}
移动
鸣警笛
闪警灯

4、适配器模式的优缺点

4.1优点
  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类
  • 增加了类的透明性和复用性
  • 灵活性和扩展性都非常好,可以在不修改原有代码的基础上增加新的适配器类,完全符合开闭原则
4.2缺点
  • 对于Java来说,由于不支持多重继承,所以一次最多只能适配一个适配者类
  • 不能为final类
  • 类适配器模式中的目标抽象类只能为接口,不能为类,有一定的局限性
  • List item

5、适配器模式的适用环境

  • 你想使用一个已经存在的类,而它的接口不符合你的需求。
  • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口 可能不一定兼容的类)协同工作。
  • (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行 子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

标签:23,适配,适配器,接口,void,设计模式,public,警灯
From: https://blog.csdn.net/qq_38811830/article/details/139307286

相关文章

  • 23种设计模式之原型模式
    原型模式1、定义原型模式:使用原型实例指定要创建对象的类型,并且通过复制这个类型来创建新的对象。2、深克隆与浅克隆根据在复制原型对象的同时是否复制包含在原型对象中引用类型的成员变量,克隆机制可以分为浅克隆和深克隆。2.1浅克隆简单来说浅克隆就是原型对象被复......
  • 代码随想录算法训练营第第22天 | 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中
    二叉搜索树的最近公共祖先相对于二叉树的最近公共祖先本题就简单一些了,因为可以利用二叉搜索树的特性。题目链接/文章讲解:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww/***@param{TreeNode}......
  • 关于 IDEA 2023.3.1总管理配置maven路径
    先调出主页面,再选择主页面中的maven路径配置1、调出主页面. 在设置中搜索System,选中SystemSettings模块,取消Confirm和Reopen模块的勾选     2、重新启动进入主页面点击Customise中的Allsettings,进入总设置,在此进行maven配置即可......
  • 【赛题样题】【大数据应用开发】2023年全国职业院校技能大赛高职组“大数据应用开发”
    2023年全国职业院校技能大赛赛题第03套赛项名称:        大数据应用开发        英文名称: BigDataApplicationDevelopment 赛项组别:        高等职业教育组               赛项编号:            ......
  • 【赛题样题】【大数据应用开发】2023年全国职业院校技能大赛高职组“大数据应用开发”
    2023年全国职业院校技能大赛赛题第04套赛项名称:        大数据应用开发        英文名称: BigDataApplicationDevelopment 赛项组别:        高等职业教育组               赛项编号:             ......
  • 20231325 贾罗祁 《Python程序设计》实验四报告
    20231325贾罗祁2023-2024-2《Python程序设计》实验四报告课程:《Python程序设计》班级:2313姓名:贾罗祁学号:20231325实验教师:王志强实验日期:2024年5月15日必修/选修:公选课1.实验内容Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。课......
  • 2252309-介绍主流源代码管理工具--Github(举例说明具体使用--旅行+兼职平台)
    一、Github介绍目录1、简介2、特点3、优点4、缺点5、使用教程6、举例二、详细介绍1、简介(1)Github的产生:软件开发过程中会因源代码引发各种繁琐的问题,如版本备份(费空间,费时间)、版本混乱(因版本备份过多造成混乱,难以找回正确的想要版本)、代码冲突(团队开发过程中多人操作同......
  • 设计模式-策略模式
    在软件开发中,我们经常会遇到在实现一个功能的时候会有多种不同的途径,每一个途径都对应一种算法,此时我们可以使用策略模式来实现灵活地选择解决途径。策略模式的定义在策略模式中,定义了一些独立的类来封装不同的算法,每个类封装一种具体的算法。每个封装算法的类都可以称......
  • 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中
    235.二叉搜索树的最近公共祖先题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/文档讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%......
  • 绘唐23AI工具阿祖小说推文软件
    绘唐23AI工具阿祖小说推文软件激活授权方式:https://qvfbz6lhqnd.feishu.cn/wiki/CcaewIWnSiAFgokOwLycwi0Encf《寻找爱情的旅程》今天是我生命中的第1000个日子,也是我决定开始一段新的旅程的日子。我决定离开我熟悉的城市,去寻找真正的爱情。我是一个平凡的女孩,长着一头乌......