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

策略模式+模版模式+工厂模式

工厂模式:

(1)避免类中出现过多的组合依赖

(2)同时减少代码中出现过多的if...else if...语句

(2)将调用者跟我们的实现类解耦

模版模式:

(1)功能复用

(2)方便扩展

策略模式:

(1)方便功能的扩展和维护

(2)防止过多的业务耦合

(3)避免使用多重条件判断

1. 抽象类

/*** 策略模式:不同类型选择不同的实现策略* */
public interface AbstractStrategy {/*** 模版模式:不同策略实现同一接口的共性部分(公共方法)* */default void commentMeth(){System.out.println("模版方法");}void handle(Object object);
}

2.抽象的实现 

@Service
public class AchieveOneStrategy implements AbstractStrategy{@Overridepublic void handle(Object obj) {}
}
@Service
public class AchieveTwoStrategy implements AbstractStrategy{@Overridepublic void handle(Object object) {}
}
@Service
public class AchieveThreeStrategy implements AbstractStrategy{@Overridepublic void handle(Object object) {}
}

3.枚举

public enum StrategyTypeEnum {ONE_STRATEGY(0,AchieveOneStrategy.class),TWO_STRATEGY(1,AchieveTwoStrategy.class),THREE_STRATEGY(2,AchieveThreeStrategy.class),;Integer type;Class<? extends AbstractStrategy> aClass;StrategyTypeEnum(Integer type, Class<? extends AbstractStrategy> aClass){this.type = type;this.aClass = aClass;}
}

4.工厂

/*** 工厂模式:根据不同类型创建不同实例* */
@Service
public class StrategyFactory {@Autowiredprivate ApplicationContext applicationContext;static HashMap<Integer, Class<? extends AbstractStrategy>> strategyHashMap = new HashMap<>();static {for (StrategyTypeEnum value : StrategyTypeEnum.values()) {strategyHashMap.put(value.type, value.aClass);}}public AbstractStrategy executeStrategy(Integer flag){Class<? extends AbstractStrategy> aClass = strategyHashMap.get(flag);return applicationContext.getBean(aClass);}
}

相关文章:

策略模式+模版模式+工厂模式

工厂模式&#xff1a; &#xff08;1&#xff09;避免类中出现过多的组合依赖 &#xff08;2&#xff09;同时减少代码中出现过多的if...else if...语句 &#xff08;2&#xff09;将调用者跟我们的实现类解耦 模版模式&#xff1a; &#xff08;1&#xff09;功能复用 &…...

云计算平台层(PaaS)指的是什么?常见的应用场景盘点

云计算平台层(PaaS)指的是什么&#xff1f;云计算平台层&#xff08;PaaS&#xff09;&#xff0c;全称PlatformasaService&#xff08;平台即服务&#xff09;&#xff0c;是云计算服务的一种重要模式。为用户提供了一个基于云端的开发和部署环境&#xff0c;允许用户开发、运…...

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段&#xff1a; 第一阶段&#xff1a;根据目标网站的列表页&#xff0c;爬对应的文档 URL 第二阶段&#xff1a;根据文档 URL&#xff0c;下载文档内容 触发器&#xff1…...

每天认识几个maven依赖(aislib+A1TRMI+Andromda+Annogen)

十七、aislib 1、是什么&#xff1f; aislib用于与人工智能&#xff08;AI&#xff09;相关的任务。这可能包括支持机器学习、数据分析或其他 AI 功能的工具。用于集成或扩展 AI 功能到 Java 项目中。 2、有什么用&#xff1f; 机器学习&#xff1a; 提供各种机器学习算法和…...

每日算法1(快慢指针)

通过一道题来了解快慢指针 这是一道力扣的算法题&#xff0c;首先来读题&#xff0c;是删除链表的中间元素&#xff0c;先来分析一下题&#xff0c;链表一共有三种可能&#xff0c;第一种是空链表&#xff0c;第二种链表的个数是偶数&#xff0c;第三种是链表的个数是奇数&…...

基于RealSense D435相机简单实现手部姿态重定向

基于Intel RealSense D435 相机和 MediaPipe的手部姿态检测&#xff0c;进一步简单实现手部姿态与机器人末端的重定向。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&#xff0c;并且有一个可以控制的机器人接口。 一、手部姿态重定向介绍 …...

Linux下搭建iSCSI共享存储-Tgt

Linux下搭建iSCSI共享存储-Tgt 在Linux上使用tgt搭建iSCSI共享存储&#xff0c;可以实现多个客户端同时访问共享存储。 1. 安装iSCSI Target软件包 使用下面命令安装&#xff1a; # centos sudo yum install scsi-target-utils sudo systemctl status tgtd# ubuntu sudo ap…...

js中正则表达式中【exec】用法深度解读

exec() 是 JavaScript 正则表达式对象&#xff08;RegExp&#xff09;中的一个方法&#xff0c;用于匹配字符串中的特定模式&#xff0c;并返回匹配结果。它比 test() 和 match() 更强大&#xff0c;因为它不仅仅返回匹配成功与否&#xff0c;还返回匹配的具体内容及其相关信息…...

Dockerfile的详解与案例

《Dockerfile 详解与案例》 一、Dockerfile 简介 Dockerfile 是一个用来构建 Docker 镜像的文本文件&#xff0c;它包含了一系列指令&#xff0c;用于描述如何创建一个 Docker 镜像。通过 Dockerfile&#xff0c;你可以定义镜像的基础环境、安装软件包、设置环境变量等操作&a…...

[spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范

文章目录 一. MyBatis XML配置文件1. 配置链接字符串和MyBatis2. 写持久层代码方法定义Interface方法实现xml测试 3. 增删改查增:删改查 二. 开发规范(mysql)三. 其他查询操作1. 多表查询2. #{} 和 ${}(面试题)使用区别 排序功能like查询 三. 数据库连接池 一. MyBatis XML配置…...

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …...

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术&#xff1a;强化学习中的自我进化之道 在人工智能的快速发展中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;已成为推动智能体自主学习与优化的关键力量。Self-Play技术&#xff0c;作为强化学习领域的一项前沿创新&#xff0c;通过…...

LCR 008. 长度最小的子数组

文章目录 1.题目2.思路3.代码 1.题目 LCR 008. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件…...

uniApp 解决uniapp三方地图获取位置接口的请求次数限制问题,分别提供 Android 和 iOS 的实现方法(原生插件获取)

以下是使用 UniApp 编写获取位置信息的原生插件步骤&#xff0c;这里分别提供 Android 和 iOS 的实现方法。 一、Android 端实现 创建原生插件模块 在 UniApp 项目目录下创建一个目录&#xff0c;比如 nativeplugins/android/locationPlugin。使用 Android Studio 创建一个 An…...

Zabbix Agent 监控 MySQL 进程状态

1. 使用 Zabbix Agent 监控 MySQL 进程状态 这是最简单的方式,通过 Zabbix Agent 监控 MySQL 进程是否在运行。具体步骤如下: 步骤1: 确认 MySQL 进程的名称 在你的 CentOS 服务器上,运行以下命令来确认 MySQL 进程的名称: ps aux | grep mysql通常,MySQL 服务的进程名…...

【模型】感知器

感知器是最早的人工神经网络之一&#xff0c;也是现代深度学习的基础之一。 1. 感知器&#xff08;Perceptron&#xff09; 1.1 定义与功能 感知器是一种线性二分类模型&#xff0c;旨在模拟生物神经元的基本功能。它通过对输入特征进行加权求和&#xff0c;并应用激活函数来…...

HtmlCss 基础总结(基础好了才是最能打的)五

Html&Css 基础学习回顾总结 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;一 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;二 Html&Css 基础总结&#xff08;基础好了才是最能打的&#xff09;三 Html&Css 基础总结…...

图神经网络实战——分层自注意力网络

图神经网络实战——分层自注意力网络 0. 前言1. 分层自注意力网络1.1 模型架构1.2 节点级注意力1.3 语义级注意力1.4 预测模块 2. 构建分层自注意力网络相关链接 0. 前言 在异构图数据集上&#xff0c;异构图注意力网络的测试准确率为 78.39%&#xff0c;比之同构版本有了较大…...

基于深度学习的数字识别系统的设计与实现(python、yolov、PyQt5)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

ChatGPT 提取文档内容,高效制作PPT、论文

随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;模式&#xff0c;可以显著提升文档内容提取和内容创作的效率。以下将详细介绍如…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...