当前位置: 首页 > article >正文

策略+适配器模式详解

文章目录

    • 1.策略模式
        • 1.目录结构
        • 2.Strategy.java 策略接口
        • 3.StrategyA.java 策略A
        • 4.StrategyB.java 策略B
        • 5.StrategyC.java 策略C
        • 6.Context.java 策略上下文
        • 7.Client.java 客户端
        • 8.小结
    • 2.适配器模式
        • 1.目录结构
        • 2.CustomPaymentProcessor.java 自己的支付接口
        • 3.PayPalPaymentService.java 第三方的支付服务
        • 4.PayPalPaymentAdapter.java 第三方适配器
        • 5.Client.java 客户端
        • 6.小结

1.策略模式

1.目录结构

CleanShot 2025-02-07 at 12.22.35@2x

2.Strategy.java 策略接口
package com.sunxiansheng.design_pattern.strategy;/*** Description: 策略接口** @Author sun* @Create 2025/2/7 12:17* @Version 1.0*/
public interface Strategy {/*** 算法接口*/void algorithmInterface();
}
3.StrategyA.java 策略A
package com.sunxiansheng.design_pattern.strategy;/*** Description: 策略A** @Author sun* @Create 2024/8/12 20:05* @Version 1.0*/
public class StrategyA implements Strategy{@Overridepublic void algorithmInterface() {System.out.println("策略A");}
}
4.StrategyB.java 策略B
package com.sunxiansheng.design_pattern.strategy;/*** Description: 策略B** @Author sun* @Create 2024/8/12 20:05* @Version 1.0*/
public class StrategyB implements Strategy{@Overridepublic void algorithmInterface() {System.out.println("策略B");}
}
5.StrategyC.java 策略C
package com.sunxiansheng.design_pattern.strategy;/*** Description: 策略C** @Author sun* @Create 2024/8/12 20:05* @Version 1.0*/
public class StrategyC implements Strategy{@Overridepublic void algorithmInterface() {System.out.println("策略C");}
}
6.Context.java 策略上下文
package com.sunxiansheng.design_pattern.strategy;/*** Description: 策略上下文,根据不同的策略执行不同的算法** @Author sun* @Create 2025/2/7 12:17* @Version 1.0*/
public class Context {/*** 策略的属性*/private Strategy strategy;/*** 在创建对象的时候就指定不同的策略* @param type*/public Context(int type) {switch (type) {case 1:strategy = new StrategyA();break;case 2:strategy = new StrategyB();break;case 3:strategy = new StrategyC();break;default:break;}}/*** 调用具体的算法*/public void contextInterface() {strategy.algorithmInterface();}
}
7.Client.java 客户端
package com.sunxiansheng.design_pattern.strategy;/*** Description: 客户端** @Author sun* @Create 2025/2/7 12:19* @Version 1.0*/
public class Client {public static void main(String[] args) {// 策略工厂中定义具体的策略Context context = new Context(1);// 调用方法时,就会指定具体的策略context.contextInterface();}
}
8.小结

策略模式,首先要定义一个策略接口,然后每个具体的策略都要去实现这个策略接口,接下来就要有一个上下文,这个上下文可以根据不同的类型来设置不同的策略。

2.适配器模式

1.目录结构

CleanShot 2025-02-09 at 11.40.08@2x

2.CustomPaymentProcessor.java 自己的支付接口
package com.sunxiansheng.design_pattern.adapter;/*** Description: 自定义的支付接口** @Author sun* @Create 2025/2/9 11:05* @Version 1.0*/
public interface CustomPaymentProcessor {void processPayment(double amount);
}
3.PayPalPaymentService.java 第三方的支付服务
package com.sunxiansheng.design_pattern.adapter;/*** Description: 第三方支付服务(需要适配的接口)** @Author sun* @Create 2025/2/9 11:06* @Version 1.0*/
public class PayPalPaymentService {public void makePayment(double amountInDollars) {System.out.println("Payment made using PayPal: $" + amountInDollars);}
}
4.PayPalPaymentAdapter.java 第三方适配器
package com.sunxiansheng.design_pattern.adapter;/*** Description: 适配器类,用来将第三方的PayPal支付接口适配到系统自定义的支付接口上** @Author sun* @Create 2025/2/9 11:07* @Version 1.0*/
public class PayPalPaymentAdapter implements CustomPaymentProcessor {/*** 注入第三方接口*/private PayPalPaymentService payPalPaymentService;public PayPalPaymentAdapter(PayPalPaymentService payPalPaymentService) {this.payPalPaymentService = payPalPaymentService;}/*** 将第三方接口适配,使其满足自己接口的要求** @param amount*/@Overridepublic void processPayment(double amount) {System.out.println("适配过的接口");payPalPaymentService.makePayment(amount);}
}
5.Client.java 客户端
package com.sunxiansheng.design_pattern.adapter;/*** Description: 客户端** @Author sun* @Create 2025/2/9 11:08* @Version 1.0*/
public class Client {public static void main(String[] args) {// 第三方的支付ServicePayPalPaymentService payPalPaymentService = new PayPalPaymentService();// 自己的适配器聚合第三方支付PayPalPaymentAdapter payPalPaymentAdapter = new PayPalPaymentAdapter(payPalPaymentService);// 使用适配器调用方法payPalPaymentAdapter.processPayment(100.0);}
}
6.小结

适配器模式其实就是自己有一个接口,然后第三方有一个服务,就需要一个适配器,这个适配器就需要实现自己的接口,然后聚合第三方的接口,来完成自己接口的对应功能。

相关文章:

策略+适配器模式详解

文章目录 1.策略模式1.目录结构2.Strategy.java 策略接口3.StrategyA.java 策略A4.StrategyB.java 策略B5.StrategyC.java 策略C6.Context.java 策略上下文7.Client.java 客户端8.小结 2.适配器模式1.目录结构2.CustomPaymentProcessor.java 自己的支付接口3.PayPalPaymentServ…...

2024年职高单招或高考计算机类投档线

问题: 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答: 部分学校2024年职高单招或高考计算机类投档线如下: 湖南工业职业技术学院 职高单招:未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…...

Salesforce 检索Layout的设定

做了许多Object,却想不起来怎么设置我的Listview的项目了。 問題: salesforce 最近参照したオブジェクト 表示項目を変更したいですが、「検索レイアウト」の選択メニューが該当オブジェクトのオブジェクトマネージャーから出てないです。 解決方法&am…...

未来游戏:当人工智能重构虚拟世界的底层逻辑

未来游戏:当人工智能重构虚拟世界的底层逻辑 在《赛博朋克2077》夜之城的霓虹灯下,玩家或许已经注意到酒吧里NPC开始出现微表情变化;在《艾尔登法环》的开放世界中,敌人的战术包抄逐渐显露出类人智慧。这些细节预示着游戏产业正站…...

Zabbix——Rocky9安装zabbix相关步骤记录

安装Zabbix 安装MariaDB 这里用MariaDB演示 https://mariadb.org/download/?trepo-config&dRedHatEnterpriseLinux9&v10.11&r_mneusoft 通过这个网址获得连接 选择对应的repo 根据系统版本和要安装的版本选择对应的repo 安装 新建一个repo文件,例…...

SECS/GEM300应用案例参考

GEM300 是一种用于半导体制造领域的通信协议标准,主要用于支持 300mm 晶圆制造的自动化生产。以下是 GEM300 的一些具体应用案例: 1. 半导体设备集成 设备制造商的应用:广州金南瓜科技有限公司通过 GEM300 SDK,帮助国内多个半导体…...

startai产品精修教程

1.把产品放置ps画布中 打开startai插件选择产品精修功能,选择金属材质即可哦 调节一下参数就可以啦,最终效果图 下载地址:StartAI画图软件官网_PS插件StartAI绘画软件生成器_Photoshop图像处理插件...

【YOLOv8】

文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…...

【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库

一、总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示“服务器繁忙,请稍后再试”,以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…...

Oracle视图(基本使用)

视图 视图是通过定制的方式显示一个或者多个表的数据。 视图可以视为“虚拟表”或“存储的查询”。 视图的优点: 提供了另外一种级别的表安全性隐藏了数据的复杂性简化了用户的SQL命令隔离基表结构的改变通过重命名列,从另一个角度提供数据。 视图里…...

梁文锋亲自挂名DeepSeek发布新论文

由 DeepSeek 联合创始人梁文锋亲自挂名的研究团队,在 arXiv 上发表了一篇题为“Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention”的论文,提出了一种全新的注意力机制架构 NSA(Native Sparse Attention&…...

低代码(Low Code)全解析:从概念到应用,从选择到价值

​在数字化浪潮席卷全球的当下,企业对软件开发的效率与灵活性愈发重视,低代码平台应运而生并迅速掀起技术热潮。 本文基于笔者 6 年的低代码实践经验,深入剖析低代码的诸多方面,涵盖其定义、发展历程、国内平台对比、开发流程、与…...

C++--STL库-List

目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库&#xff08;STL&#xff09;中的双向链表容器&#xff0c;属于<list>头文件。 它的特点是&#xff1a; 动态大小&#xff1a;可以随时插入…...

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法&#xff08;important&#xff09; 一、什么叫抽象类&#xff1a; 有时候将一个父类设计的非常抽象&#xff0c;以至于它没有具体的实例&#xff0c;这样的类称为抽象类 abstract关键字的使用&#xff1a; ​ 1、abstract:抽象的 ​ 2、abs…...

HomeAssistant 发现MQTT设备(温度,湿度,开关)

要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现&#xff0c;可以按照以下步骤操作&#xff1a; 1.前期准备工作 安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装) HA的集成中安装MQTT,并且连接上(EM…...

本地DeepSeek模型GGUF文件转换为PyTorch格式

接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…...

手写数字识别的神经网络 2层神经网络的类 代码详解

源代码和图解来自鱼书 目录 2层神经网络的类 源代码&#xff1a; 详解&#xff1a; 1. 类的初始化 (__init__) 2. 前向传播 (predict) 3. 损失函数 (loss) 4. 准确率计算 (accuracy) 5. 数值梯度计算 (numerical_gradient) 6. 反向传播计算梯度 (gradient) 总结&#…...

【项目】基于STM32F103C8T6的四足爬行机器人设计与实现(源码工程)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【项目】基于STM32F103C8T6的四足爬行机器人设计与…...

[代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录

文章目录 一、xFormers版本问题1、先确认下自己torch版本所对应的cuda版本2.安装对应版本(1) 到对应官网下载包本地安装(2)代码安装 二、attn_mask尺寸错误三、diffusers四、Huggingface 配置基于stable diffusion预训练模型的环境&#xff0c;记录踩坑记录 一、xFormers版本问…...

使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)

7.5. 配图生成 目的&#xff1a;由于小红书发布文章要求图文格式&#xff0c;因此在生成文案的基础上&#xff0c;我们还需要生成图文搭配文案进行发布。 原实现思路&#xff1a; 起初我打算使用deepseek的文生图模型Janus进行本地部署生成&#xff0c;参考博客&#xff1a;De…...

理解三种哈希算法:MD5、CRC、SHA256

0、背景 哈希算法是一类重要的算法&#xff0c;用于将任意长度的数据映射为固定长度的哈希值。哈希算法广泛应用于数据完整性校验、密码学、数字签名等领域。本文将详细介绍三种常见的哈希算法&#xff1a;MD5、CRC 和 SHA256&#xff0c;并探讨它们的原理、特点及应用场景。 …...

机器学习基本篇

文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…...

python常用库整理

Python常用库众多&#xff0c;涵盖了数据分析、科学计算、机器学习、Web开发、游戏开发、自然语言处理、图像处理、自动化测试等多个领域。以下是一些常用的Python库及其主要用途&#xff1a; 数据分析与科学计算 NumPy&#xff1a;用于科学计算的基础库&#xff0c;支持大型…...

SQL数据处理函数全解析

1. 引言 1.1 SQL简介 SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。它允许用户查询、插入、更新和删除数据库中的数据。SQL的强大之处在于其内置的函数库,这些函数可以帮助我们更高效地处理数据。 1.2 数据处理函数的重要性 数据处理函数在S…...

Python解决“反应物浓度”问题

Python解决“反应物浓度”问题 问题描述测试样例解题思路代码 问题描述 在一个神秘的实验室里&#xff0c;科学家小Z正在研究一种特殊的化学反应。她有一个名为 reactant 的初始物质&#xff0c;其起始值为 0。为了推动实验进展&#xff0c;小Z设计了一系列操作&#xff0c;这…...

HTTP FTP SMTP TELNET 应用协议

1. 标准和非标准的应用协议 标准应用协议&#xff1a; 由标准化组织&#xff08;如 IETF&#xff0c;Internet Engineering Task Force&#xff09;制定和维护&#xff0c;具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准&#xff0c;不同的实现之间可以很好地进行…...

百度搜索全面接入DeepSeek-R1满血版:AI与搜索的全新融合

不等了&#xff0c;就是现在&#xff01;百度搜索全量接入DeepSeek-R1满血版 百度搜索已正式全量接入DeepSeek-R1满血版&#xff0c;在宣布“将接入”仅过了24小时后。 就在宣布“将接入”仅24小时后&#xff0c;百度搜索 已正式全量接入 DeepSeek-R1满血版&#xff01;得益于…...

《DeepSeek技术:开启工业互联网低成本开发新时代》

在工业互联网蓬勃发展的当下&#xff0c;企业数字化转型的需求日益迫切。然而&#xff0c;高昂的应用开发成本却如同拦路虎&#xff0c;阻碍着众多企业的前进步伐。此时&#xff0c;DeepSeek技术的出现&#xff0c;为工业互联网应用开发带来了新曙光&#xff0c;凭借其独特优势…...

深入浅出TypedArray:网络数据处理、WebGPU与加密实战

JavaScript的TypedArray是现代Web开发中处理二进制数据的利器。本文将结合网络数据传输、WebGPU编程和简单加密算法三个实战场景&#xff0c;带你领略TypedArray的强大能力。 一、TypedArray基础认知 TypedArray家族包括Int8Array、Uint16Array、Float32Array等11种视图类型&a…...