设计模式-设配器模式

news/2024/4/29 6:52:15/文章来源:https://blog.csdn.net/dfdg345/article/details/137110798

目录

🎊1.适配器模式介绍

🎃2.适配器类型 

🎏3.接口适配器 

🎐4.类的适配器  

🎎5.优缺点 


1.适配器模式介绍

  • 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。
  • 这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
  • 适配器继承或依赖已有的对象,实现想要的目标接口。

2.适配器类型 

  • 类的适配器模式

想将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可

  • 对象的适配器模式

想将一个对象转换成满足另一个新接口的对象时,可以创建一个适配器类,持有原类的一个实例,在适配器类的方法中,调用实例的方法就行

  • 接口的适配器模式

不想实现一个接口中所有的方法时,可以创建一个Adapter,实现所有方法,在写别的类的时候,继承Adapter类即

3.接口适配器 

创建支付接口,里面包含各种方法

/*** 支付接口*/
public interface PayGateWay {/*** 统一下单*/void unifiedOrder();/*** 退款*/void refund();/*** 查询状态*/void query();/*** 发红包*/void sendRedPack();
}

创建适配器类实现支付接口,

public class Adapter implements PayGateWay{@Overridepublic void unifiedOrder() {}@Overridepublic void refund() {}@Overridepublic void query() {}@Overridepublic void sendRedPack() {}
}

具体的类, 因为我们具体的类用不完接口中的方法,如果全部实现会显得累赘,我们只需要使用适配器类实现支付接口,然后我们在继承适配器类,重写想要的方法即可

public class ProductVideoOrder extends Adapter{@Overridepublic void unifiedOrder() {System.out.println("统一下单");}@Overridepublic void refund() {System.out.println("退款");}
}

4.类的适配器  

老的类

/*** 老的类*/
public class OldModule {public void  methodA(){System.out.println("老类的方法A");}}

新的接口 

/*** 目标接口*/
public interface TargetModule {/*** 和需要整合老的类的方法名一致*/void methodA();/*** 新的方法*/void methodB();void methodC();
}

适配器类


/*** 适配器类,继承老的类,实现新的接口*/
public class AdapterModule extends OldModule implements TargetModule{@Overridepublic void methodB() {System.out.println("新的接口的方法B");}@Overridepublic void methodC() {System.out.println("新的接口的方法C");}
}

5.优缺点 

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

 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

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

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

相关文章

自动化测试 —— Pytest fixture及conftest详解

前言 fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似u…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候,自动进入安全模式 在安全模式中,NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后,更新fsimage文件 更新完成之后,NameNode会将fsimage文件中的元数据加…

利用云手机技术,开拓海外社交市场

近年来,随着科技的不断进步,云手机技术逐渐在海外社交营销领域崭露头角。其灵活性、成本效益和全球性特征使其成为海外社交营销的利器。那么,究竟云手机在海外社交营销中扮演了怎样的角色呢? 首先,云手机技术能够消除地…

腾讯云4核8G服务器价格,12M带宽一年646元,送3个月

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

Eclipse的基本使用讲解(建项目,建包,建类,写代码(基本语法))新手入门必备

目录 一.介绍eclipse 二.操作Eclipse 1.选择工作空间 2.建项目,建包,建类 1.建项目(两种) 2.建包 3.建类 三.写代码(基本语法) 1.代码操作 2.代码规范 3.代码注释 一.介绍eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其…

【LeetCode热题100】124.二叉树的最大路径和(二叉树)

一.题目要求 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root …

Qt打印系统库的日志 - QLoggingCategory

Qt的动态库通过源码可以可以看到含有大量的qCInfo 和 qCDebug 等大量的日志, 但是我们正常运行Qt程序,这些动态库或插件里面的日志是不会输出到我们的控制台里面的。 所以本章主要记录怎么输出这些日志出来。 一: 步骤 主要使用的是Qt的 函…

macOS 13 Ventura (苹果最新系统) v13.6.6正式版

macOS 13 Ventura是苹果电脑的全新操作系统,它为用户带来了众多引人注目的新功能和改进。该系统加强了FaceTime和视频通话的体验,同时优化了邮件、Safari浏览器和日历等内置应用程序,使其更加流畅、快速和安全。特别值得一提的是,…

基于51单片机的客车汽车安全气囊控制器Proteus仿真

地址:https://pan.baidu.com/s/10enj1EYm_0Z8f_19Sz_eCQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52简介: AT89C52是一款经典的8位单片机,是意法半导体(STMicroelectronics)公…

[创建型模型] 原型模式

一 介绍 原型设计模式,允许通过复制已有对象的实例,来创建新的对象,并且不需要显示的实例化过程。 目的是通过复制现有对象来创建新对象,从而减少了对象的实例化开销。(避免了一些数据的初始化,读取,加载数据,资源的…

原生 HTML/CSS/JS 实现右键菜单和二级菜单

文章来源:www.huhailong.vip 站点 文章源地址:https://www.huhailong.vip/article/1764653112011841538 Demo效果演示地址 先看效果图 {{{width“auto” height“auto”}}} 需要注意的就是边界检测处理,到极端点击底部和右侧时如果不做处理会…

外包干了8天,技术退步明显.......

先说一下自己的情况,大专生,19年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

React系列之框架特点和组件类型

文章目录 ReactMVC MVP MVVM单/双向数据绑定React特点JSX 组件和不同类型 React MVC MVP MVVM Web设计模式,通过分离模块来改进代码的组织方式。 MVC 是 Model View Controller 的缩写。 Model:模型层,数据相关的操作。View:视…

linux 环境安装配置

安装java17 1.下载安装包 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2.解压到自定义目录/usr/local/java mkdir /usr/local/java tar zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java 3.配置环境变量 echo export PATH$PATH:/…

Mac添加和关闭开机应用

文章目录 mac添加和关闭开机应用添加开机应用删除/查看 mac添加和关闭开机应用 添加开机应用 删除/查看 打开:系统设置–》通用–》登录项–》查看登录时打开列表 选中打开项目,点击“-”符号

Vue指令之v-bind

v-bind用于动态设置html的标签属性,如src、url、title等,因为插值表达式{{}}没有办法用在标签属性上,需要用到其他工具。 比如前端要根据后端传来的参数,动态的显示图片,就需要把图片的src属性绑定到Vue实例的一个变量…

ensp中pc机访问不同网络的服务器

拓扑图如下,资源已上传 说明:pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段,192.168.2.0网段和192.168.3.0网段,在未配置的情况下,pc设备是访问不到server的 具体操作流程 第一;pc设备…

星光/宝骏/缤果/长安 车机CarPlay手机操作破解教程V2.0版本(无需笔记本、无需笔记本、无需笔记本)

之前写了个1.0版本,由于太局限,需要用到笔记本才能操作,很多车友反馈不方便。特此出个手机版教程,简单easy,妈妈再也不用担心我搞不定啦 一、准备工作 先卸载车机上的autokit 或者 智能互联 app,这步很关…

RPA使用Native Messaging协议实现浏览器自动化

RPA 即机器人流程自动化,是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作,从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞分析 CVE-2023-46604

Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActiveMQ 5.18.2版本及以前&#xff0…