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

GPT带我学-设计模式13-策略模式

概述

策略模式

例子

你可以创建一个策略工厂(Strategy Factory)来根据传入的 orgId 动态地选择合适的策略。以下是实现示例:

  1. 首先,定义策略接口和具体策略类:
public interface CardPathStrategy {String generatePath();
}public class OrganizationAStrategy implements CardPathStrategy {@Overridepublic String generatePath() {return "path/for/organizationA";}
}public class OrganizationBStrategy implements CardPathStrategy {@Overridepublic String generatePath() {return "path/for/organizationB";}
}
  1. 创建一个策略工厂 CardPathStrategyFactory 来根据 orgId 返回相应的策略:
import java.util.HashMap;
import java.util.Map;public class CardPathStrategyFactory {private static final Map<String, CardPathStrategy> strategies = new HashMap<>();static {strategies.put("orgA", new OrganizationAStrategy());strategies.put("orgB", new OrganizationBStrategy());// 添加更多策略}public static CardPathStrategy getStrategy(String orgId) {return strategies.get(orgId);}
}
  1. 在你的业务逻辑中使用策略工厂:
public class CardPathGenerator {public static void main(String[] args) {String orgId = "orgA";  // 这个可以是传入的参数CardPathStrategy strategy = CardPathStrategyFactory.getStrategy(orgId);if (strategy == null) {throw new IllegalArgumentException("No strategy found for orgId: " + orgId);}CardPathContext context = new CardPathContext(strategy);System.out.println(context.generateCardPath());  // 输出:path/for/organizationAorgId = "orgB";  // 更改组织IDstrategy = CardPathStrategyFactory.getStrategy(orgId);if (strategy == null) {throw new IllegalArgumentException("No strategy found for orgId: " + orgId);}context.setStrategy(strategy);System.out.println(context.generateCardPath());  // 输出:path/for/organizationB}
}

通过这种方式,你可以根据传入的 orgId 动态地选择不同的策略。工厂类 CardPathStrategyFactory 负责管理策略的创建和选择逻辑,这使得代码更简洁且易于维护。

相关文章:

GPT带我学-设计模式13-策略模式

概述 策略模式 例子 你可以创建一个策略工厂&#xff08;Strategy Factory&#xff09;来根据传入的 orgId 动态地选择合适的策略。以下是实现示例&#xff1a; 首先&#xff0c;定义策略接口和具体策略类&#xff1a; public interface CardPathStrategy {String generat…...

【Linux】Ubuntu配置JDK环境、MySQL环境

一、 Ubuntu配置JDK环境 在Ubuntu系统中安装JDK 8可以通过以下步骤进行&#xff1a; 打开终端。更新包列表&#xff1a; sudo apt update安装OpenJDK 8&#xff1a; sudo apt install openjdk-8-jdk验证安装是否成功&#xff1a; java -version注&#xff1a;如果系统中安…...

【ElasticSearch】ES 5.6.15 向量插件支持

参考 : https://github.com/lior-k/fast-elasticsearch-vector-scoring 下载插件 安装插件 插件目录&#xff1a; elasticsearch/plugins, 安装后的目录如下 plugins└── vector├── elasticsearch-binary-vector-scoring-5.6.9.jar└── plugin-descriptor.properties修…...

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩&#xff0c;是一种用时间换空间的 trade-off 思想&#xff0c;用 CPU 的时间去换磁盘或者网络 I/O 传输量&#xff0c;用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…...

设计模式使用场景实现示例及优缺点(行为型模式——模板方法模式)

模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法的骨架&#xff0c;将算法的一些步骤延迟到子类中。这样可以在不改变算法的结构的前提下…...

ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK

目前市面上的ETL工具众多&#xff0c;为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值&#xff0c;我们选取了目前市面上最流行的三款ETL工具&#xff08;ETLCloud、DataX、Kettle&#xff09;来作为本次性能传输的代表&#xff0c;虽然性能测试数据有很多相…...

eNSP:防火墙设置模拟公司配置(二)

实验拓扑&#xff1a; 实验要求&#xff08;二&#xff09;&#xff1a; 7&#xff1a; 办公设备可以通过电信连接和移动上网&#xff08;多对多NAT&#xff0c;并且需要保留一个公网IP&#xff09; 8&#xff1a; 分公司通过公网移动电信&#xff0c;访问DMZ的http服务器 9&a…...

vue3 两个组件之间传值

Props 父组件可以通过 props 将数据传递给子组件。这是最常见的组件间通信方式 <!-- 父组件 --><template><ChildComponent :message"parentMessage" /></template><script>import ChildComponent from ./ChildComponent.vue;export…...

基于matlab的深度学习案例及基础知识专栏前言

专栏简介 内容涵盖深度学习基础知识、深度学习典型案例、深度学习工程文件、信号处理等相关内容&#xff0c;博客由基于matlab的深度学习案例、matlab基础知识、matlab图像基础知识和matlab信号处理基础知识四部分组成。 一、 基于matlab的深度学习案例 1.1、matlab:基于模…...

机器学习——L1 L2 范数 —>L1 L2正则化

1、L1范数和L2范数是机器学习和数据分析中经常使用的两种范数&#xff0c;它们之间存在多个方面的区别。 以下是关于L1范数和L2范数区别的详细解释&#xff1a; 一、定义差异 L1范数&#xff1a;也被称为曼哈顿范数&#xff0c;是向量元素的绝对值之和。对于一个n维向量x&am…...

大模型时代,还需要跨端framework吗?

跨端 在我近十年的大前端从业经验中&#xff0c;有一半是在和flutter/rn打交道。虽然&#xff0c;flutter和rn官方和社区已经在非常努力的优化、填坑了&#xff0c;但是这两者的坑还是远远高于原生开发。 但是&#xff0c;在锁表的大周期下&#xff0c;华为带着鸿蒙来了&#…...

ASP.NET Core----基础学习05----将数据传递给视图文件的五种情况

文章目录 1. 类型一&#xff1a;使用ViewData将数据传递给视图文件&#xff08;默认视图文件&#xff09;2. 类型二&#xff1a;自定义选择视图文件 并传递ViewData数据3. 类型三&#xff1a;使用ViewBag将数据传递给视图文件4. 类型四&#xff1a;在视图文件中使用model转化为…...

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …...

力扣题解(回文子串)

647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 思路&#xff1a; 首先&#xff0c;本题要求的是数目&#xff0c;而且不要求没…...

对数的基本概念

概念 在数学中&#xff0c;对数是对求幂的逆运算&#xff0c;正如除法是乘法的倒数&#xff0c;反之亦然。这意味着一个数字的对数是必须产生过另一个固定数字(基数)的指数 如果a的x次方等于N&#xff08;a > 0, 且a不等于1&#xff09;&#xff0c;那么数x叫做以a为底N的…...

C双指针滑动窗口算法

这也许是双指针技巧的最⾼境界了&#xff0c;如果掌握了此算法&#xff0c;可以解决⼀⼤类⼦字符串匹配的问题 原理 1、我们在字符串 S 中使⽤双指针中的左右指针技巧&#xff0c;初始化 left right 0&#xff0c;把索引闭区间 [left, right] 称为⼀个「窗⼝」。 2、我们先…...

WPF学习(6) -- WPF命令和通知

一 、WPF命令 1.ICommand代码 创建一个文件夹和文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace 学习.Command {public class MyCommand : ICommand{Acti…...

升级到LVGL9的一些变化(后续发现再补充)

目录 一、主要内容 二、新增内容 三、常规API变化 四、Display API(显示API) 五、其他 最近在将LVGL8的demo代码升级到LVGL9,带来不小的变化 ,收集网上的一些内容,整理如下: 一、主要内容 二、新增内容 三、常规API变化 四、Display API(显示API)...

当在多线程环境中使用 C++进行编程时,怎样确保线程安全以及如何处理线程之间的同步和通信?

在C中确保线程安全性和处理线程之间的同步和通信有多种方法。下面是一些常用的技术和技巧&#xff1a; 互斥锁&#xff1a;使用互斥锁可以确保只有一个线程可以访问共享资源。在访问共享资源之前获取锁&#xff0c;在完成后释放锁。这可以防止多个线程同时访问同一份数据&#…...

博物馆地图导航系统:高精度地图引擎与AR/VR融合,实现博物馆数字化转型

在人民日益追求精神文化的时代下&#xff0c;博物馆作为传承与展示人类文明的璀璨殿堂&#xff0c;其重要性不言而喻。然而&#xff0c;随着博物馆规模的不断扩大和藏品种类的日益丰富&#xff0c;游客在享受知识盛宴的同时&#xff0c;也面临着“迷路”与“错过”的困扰。博物…...

七自由度机械臂嵌入式实时运动控制固件框架

1. 项目概述RobotControl_7Axis是一个面向七自由度&#xff08;7-DOF&#xff09;串联式机械臂的嵌入式运动控制固件框架&#xff0c;专为基于ARM Cortex-M系列微控制器&#xff08;如STM32H743、STM32F429&#xff09;的实时伺服驱动器节点设计。该项目并非通用机器人操作系统…...

2026届必备的十大降重复率工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 维普 AIGC 检测系统&#xff0c;是特意为学术机构还有研究者用心设计的&#xff0c;它的主要…...

如何高效使用付费墙绕过工具:Chrome扩展的完整实践指南

如何高效使用付费墙绕过工具&#xff1a;Chrome扩展的完整实践指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息获取日益重要的今天&#xff0c;付费墙成为许多用户访问优质…...

别再只用Speedtest了!自建LibreSpeed测速站,监控家庭宽带/公司内网真实表现

自建网络测速站&#xff1a;用LibreSpeed打造精准带宽监控系统 每次看到运营商宣传的"千兆宽带"&#xff0c;你是否怀疑过实际使用中根本达不到承诺速度&#xff1f;公共测速网站的结果总让人将信将疑——它们可能被ISP特殊优化&#xff0c;或是受限于服务器位置。更…...

AI辅助开发新思路:让快马AI智能生成可配置的403 forbidden全局处理组件

今天在开发一个后台管理系统时&#xff0c;遇到了一个常见的权限控制问题&#xff1a;当用户访问没有权限的页面时&#xff0c;系统直接抛出了403错误。这种生硬的体验显然不够友好&#xff0c;于是我决定开发一个智能化的403 forbidden处理组件。经过在InsCode(快马)平台上的实…...

哈希表入门教程:从零搭建完整结构

一、什么是哈希表&#xff1f;1.核心定义哈希表 数组 哈希函数 冲突解决哈希表是一种通过哈希函数将「键&#xff08;Key&#xff09;」映射到「索引&#xff08;Index&#xff09;」&#xff0c;从而实现O (1) 平均时间复杂度查找、插入、删除的数据结构。2.核心三要素&…...

2026届学术党必备的十大降重复率神器解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 减少AIGC率的关键要点是全力去降低文本里那些能够被分辨出来的机器生成特性 &#xff0c;这…...

UART 入门指南(Linux新手版)

UART 入门指南&#xff08;Linux新手版&#xff09; 适用对象&#xff1a;嵌入式/电子/通信初学者 目录 什么是 UARTUART 工作原理硬件接口与接线通信参数详解编程示例常见问题与调试 1. 什么是UART 1.1 基本定义 UART 的全称是 Universal Asynchronous Receiver/Transmitte…...

C++ 硬件特征自适应分发:利用 C++ 特性实现对不同 CPU 指令集(AVX2/AVX-512)的运行时代码路径最优选择

C 硬件特征自适应分发&#xff1a;运行时代码路径最优选择各位技术爱好者&#xff0c;大家好&#xff01;在现代高性能计算领域&#xff0c;充分挖掘硬件潜力是提升程序性能的关键。我们知道&#xff0c;CPU架构在不断演进&#xff0c;其指令集也在持续扩展&#xff0c;以支持更…...

jsTree完整生态系统指南:插件、主题和工具全解析

jsTree完整生态系统指南&#xff1a;插件、主题和工具全解析 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree是一个功能强大的jQuery树形插件&#xff0c;专为现代Web应用设计&#xff0c;提供了完整的树形结构…...