Spring 设计模式之适配器模式
Spring 设计模式之适配器模式
- 适配器模式
- 用到的场景
- java举例
适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类一起工作。
其核心思想是通过一个适配器类将不兼容的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
两者通过适配器一起工作,强调
1.通过实现目标接口和内部组合
2.实现的目标接口一定是旧对象
3.不是通过继承
用到的场景
1.新的对象,需要旧对象里面的方法
2.A有,B没有,B就通过适配器去获取A里面的元素(方法)
需要存在的核心类:
1.适配器类(实现旧对象)
java举例
// 旧的打印机接口
public interface OldPrinter { void printOldWay(String content);
}// 旧的打印机实现
public class OldPrinterImpl implements OldPrinter { @Override public void printOldWay(String content) { System.out.println("使用旧的方式打印内容: " + content); }
}// 新的打印机接口
public interface NewPrinter { void printNewWay(String content);
}// 适配器类,将旧的打印机适配为新的打印机
public class PrinterAdapter implements NewPrinter { private OldPrinter oldPrinter; public PrinterAdapter(OldPrinter oldPrinter) { this.oldPrinter = oldPrinter; } @Override public void printNewWay(String content) { // 适配过程:将新方式的内容适配为旧方式的内容进行打印 oldPrinter.printOldWay(content); }
}// 新的文档类,它需要一个新打印机来打印
public class NewDocument { public void print(NewPrinter printer) { printer.printNewWay("这是一个新文档的内容"); }
}// 调用使用示例
public class AdapterPatternDemo { public static void main(String[] args) { // 创建一个旧的打印机实例 OldPrinter oldPrinter = new OldPrinterImpl(); // 使用适配器将旧的打印机适配为新的打印机 NewPrinter newPrinter = new PrinterAdapter(oldPrinter); // 创建一个新的文档并打印 NewDocument document = new NewDocument(); document.print(newPrinter); }
}
运行结果
使用旧的方式打印内容: 这是一个新文档的内容
相关文章:
Spring 设计模式之适配器模式
Spring 设计模式之适配器模式 适配器模式用到的场景java举例 适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类一起工作。 其核心思想是通过一个适配器类将不兼容的接口转换成客户端期望的另一个接口&…...
多传感器数字化分析系统
在工业飞速发展的今天,设备的安全稳定运行成为企业高效生产的关键因素。然而,传统的人工巡检方式面临着诸多挑战,如效率低下、漏检误检以及难以精准掌握设备运行状态等。旗晟凭借深厚的技术积累和创新精神,推出了多传感器数字化分…...
Java 基础教学:面向对象编程基础-封装、继承与多态
面向对象编程(OOP)是现代编程的重要范式,Java 语言提供了丰富的 OOP 特性,主要包括封装、继承和多态。本文将详细讲解这三个概念及其实现方式,并提供相应的代码示例。 1. 封装 1.1 概念 封装是将对象的状态…...
Ubuntu环境本地部署DbGate数据库管理工具并实现无公网IP远程访问
文章目录 前言1. 安装Docker2. 使用Docker拉取DbGate镜像3. 创建并启动DbGate容器4. 本地连接测试5. 公网远程访问本地DbGate容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统中使用Docker部署DbGate数…...
【AI抠图整合包及教程】Meta SAM 2:视觉分割的革命性飞跃
在人工智能的浪潮中,每一次技术的革新都如同一场视觉盛宴,让我们见证着数字时代的变迁。Meta再次以Segment Anything Model 2(SAM 2)引领了图像和视频分割技术的新纪元。作为首个用于实时、可提示的图像和视频对象分割的统一模型&…...
使用语言模型进行文本摘要的五个级别(llm)
视频链接:5 Levels Of LLM Summarizing: Novice to Expert...
ubuntu交叉编译libffi库给arm平台使用
1.下载并解压: 2.生成makefile 编译: make 编译成功: 安装: make install 安装成功 查看安装后的libffi库...
【jvm】空间分配担保策略
目录 1. 说明2. 工作原理2.1 估算新生代存活对象大小2.2 判断老年代的剩余空间2.3 触发Full GC的条件 3. 相关参数与配置3.1 -XX:HandlePromotionFailure3.2 -XX:PretenureSizeThreshold3.3 -XX:MaxTenuringThreshold3.4 -XX:TargetSurvivorRatio 4.作用与意义 1. 说明 1.在Ja…...
iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
众所周知,苹果品牌的设备自己有AirPlay的投屏功能,iPhone要投屏到MacBook只要连接同一网络,然后开启AirPlay就可以投屏。但其他品牌的手机没有AirPlay,怎么将手机屏幕投射到MacBook呢? 安卓系统的手机可以使用无线投屏…...
BUU usualCrypt1
查壳,32bit,丢进ida32中进行反编译,简单的不多说,直接进main分析 简单分析,打上注释,没啥好看的,就一个加密函数,加密完后和一个字符串进行比较,由此可以逆推出加密前的字…...
第十七章 标准库特殊设施
17.1 tuple类型 当希望将一些数据合成单一对象,但又不想麻烦地定义一个新数据结构来表示这些数据时,tuple非常有用。tuple是类似pair的模板。 tuple<size_t, size_t, size_t> threeD; //三个成员都设置为0//为每个成员提供初始值 tuple<strin…...
【格言分享】程序员的经典名言解读
上一期文章我们分享了一些程序员的经典名言,每一句都蕴含着深刻的道理。 接下来就给大家一个一个分析一下 这些格言确实捕捉到了编程和软件开发的精髓,每一条都蕴含着丰富的经验和智慧。下面我将逐一解释这些格言,并分享一些我的看法。 C程序员永远不会灭亡。他们只是cast…...
SpringBoot接收LocalDateTime参数
一、通过RequestBody接收 方式1:实体类上加上 JsonFormat,并通过 pattern 属性指定时间格式 public class Time {JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")LocalDateTime localDateTime;JsonFormat(pattern "yyyy-MM-dd")Loca…...
Typora配置GitHub图床--结合PicGo
【当前问题】Typora文档分享时 无法看到本地路径图片 【怎么解决】把文档中的图片设置为 公开链接 【准备工具】 Typora 官网https://typoraio.cn/(购买 / 自寻破解法)GitHub账号 https://github.com/PicGo https://github.com/Molunerfinn/PicGo/relea…...
【书生.浦语实战营】——入门岛
【书生.浦语实战营】——入门岛_第一关_Linux基础 任务分布1. 本地vscode远程连接并进行端口映射端口映射What——何为端口映射How——怎么进行端口映射 2. Linux基础命令touch :创建文件mkdir :创建目录cd:进入 退出 目录pwd :确定当前所在目录cat:可以…...
WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)
文章目录 1、案例效果2、弹窗控件使用1.引入用户控件2、按钮命令实现 3、总结4、源代码获取 1、案例效果 2、弹窗控件使用 1.引入用户控件 打开 Wpf_Examples 项目,在引用中添加用户控件库,在 MainWindow.xaml 界面引用控件库,代码如下&…...
嵌入式——STM32外设应用
STM32 微控制器以其高性能、低功耗和丰富的外设资源,在嵌入式系统设计中得到了广泛应用。以下将详细介绍 STM32 的主要外设及其典型应用,帮助开发者更好地理解和应用这些功能。 1. GPIO(通用输入输出端口) 功能:GPIO…...
HCIA(ACL)
第七节 ACL:访问控制列表 访问控制----在路由器的入或者出的接口上,匹配流量,之后产生动作---允许或拒绝 定义感兴趣流量-----帮助其他软件抓流量 匹配规则: 至上而下,逐一匹配,上调匹配按照上条执行…...
react基础之reactHooks
文章目录 React Hooks 使用指南常用 Hooks使用规则 小结 React Hooks 使用指南 React Hooks 是 React 16.8 引入的一种新特性,允许在函数组件中使用状态和其他 React 特性,而无需编写类组件。以下是一些基础的 Hooks 及其使用规则。 常用 Hooks useSta…...
Java基础0-Java概览
Java概览 一、Java的主要特性 Java 语言是简单的: Java 丢弃了 C 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
