java 使用策略模式减少if
使用多态:通过使用面向对象的多态特性,可以将不同的逻辑封装到不同的类中,避免大量的 if
语句。使用继承和接口来定义通用的方法,并让具体的实现类实现这些方法。
使用设计模式:使用设计模式可以更好地组织和管理代码逻辑,减少 if
语句的使用。例如,工厂模式、策略模式、观察者模式等都可以帮助将复杂的条件逻辑转化为更清晰和可扩展的结构。
使用映射表:将条件与对应的操作放入一个映射表中,避免使用大量的 if-else 语句。可以使用 Map
或者其他数据结构来存储条件和对应操作的关联关系,通过查找映射表获取对应的操作。
使用策略模式:策略模式将不同的策略封装成独立的类,避免使用大量的条件语句。通过定义一个策略接口,然后针对不同的情况实现不同的策略类,根据需要选择合适的策略进行处理。
使用枚举:使用枚举可以将条件与对应的操作封装到枚举常量中,避免使用大量的 if-else
语句。每个枚举常量代表一种情况,具有对应的方法或行为,通过枚举常量的方式来执行相应的操作。
使用函数式编程:Java 8 引入的函数式编程特性可以帮助减少条件判断。通过使用 lambda
表达式、方法引用等函数式编程的特性,可以将逻辑封装成函数并传递,避免大量的 if-else 语句。
interface PaymentStrategy {void pay(double amount);
}class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("Paid " + amount + " using Credit Card");}
}class PayPalPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("Paid " + amount + " using PayPal");}
}class PaymentContext {private PaymentStrategy paymentStrategy;public PaymentContext(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void performPayment(double amount) {paymentStrategy.pay(amount);}
}public class Main {public static void main(String[] args) {PaymentContext paymentContext1 = new PaymentContext(new CreditCardPayment());paymentContext1.performPayment(100.0); // 输出:Paid 100.0 using Credit CardPaymentContext paymentContext2 = new PaymentContext(new PayPalPayment());paymentContext2.performPayment(50.0); // 输出:Paid 50.0 using PayPal}
}
相关文章:
java 使用策略模式减少if
使用多态:通过使用面向对象的多态特性,可以将不同的逻辑封装到不同的类中,避免大量的 if 语句。使用继承和接口来定义通用的方法,并让具体的实现类实现这些方法。 使用设计模式:使用设计模式可以更好地组织和管理代码逻…...
第1章 引论
前言 这一章,阐述本书的目的,并简要复习离散数学以及程序设计的一些概念: 看到程序在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性总结本书其余部分所需要的数学基础简要复习递归 1.1 本书讨论的内容 在许多问题当中…...
深入探究Linux文件:.sh、.swp文件的作用与意义 (linux .sh.swp)
近年来,Linux操作系统已经成为了许多服务器、云计算平台、嵌入式设备等领域的首选。Linux操作系统囊括了大量的命令和文件,而其中 .sh 和 .swp 文件是许多 Linux 用户较为熟悉的两种文件类型。那么,这两种文件的作用和意义是什么呢࿱…...
优雅的使用String字符串处理各种类型转换
文章目录 🌟 优雅的使用String字符串处理各种类型转换🍊 基本类型转字符串🍊 字符串转基本类型🍊 字符串与字符数组的转换🍊 字符串与字节数组的转换🍊 其他类型转字符串🍊 总结 📕我…...
Harmony 个人中心(页面交互、跳转、导航、容器组件)
个人中心 前言正文一、创建工程二、登录① 更换启动页面② 拓展修饰符③ 页面跳转④ 等待进度条 三、导航栏四、首页① 轮播图② 网格列表 五、我的① 带参数跳转 六、源码 前言 今天是1024,祝各位程序员们,钱多事少离家近,不秃也强bug黄。在…...
AlDente Pro for Mac: 掌控电池充电的终极解决方案
你是否曾经为了保护你的MacBook的电池,而苦恼于无法控制它的充电速度?AlDente Pro for Mac 是一款专为Mac用户设计的电池管理工具,它能帮助你解决这个问题。 AlDente Pro for Mac 是一款电池最大充电限制软件,它能够让你自由地设…...
tomcat的负载均衡、动静分离(nginx联动)
动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: proxy_pass http://tomcat; proxy_set_h…...
基于单片机的温湿度检测及远程控制系统设计
目 录 引 言. 2 第一章 绪 论. 2 1.1 单片机简介 2 1.2 传感器简介 2 1.3 LCD液晶显示器简介 2 1.4 本设计的主要内容和目标 2 第二章 系统总体设计. 2 2.1 系统功能要求与技术指标 2 2.1.1 功能要求. 2 2.1.2 技术指标. 2 2.2 系统设计思路 2 2.3系统设计原则 2 2.4 系…...
前后端交互系统:在Node.js中运行JavaScript
在Node.js中运行JavaScript,您需要编写适用于服务器端的代码,而不是浏览器端的代码。以下是一些示例代码,用于在Node.js中创建一个简单的HTTP服务器并在浏览器中访问它: // 引入Node.js内置的http模块 const http require(http);…...
Maven学习
Maven介绍 Maven是Apache的一个开源项目,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 Maven可以让团队能够更科学的构建项目,我们可以用配置文件的方式,对项目的名称、描述、项目版本号、项目依赖等信息进行描述…...
《动手学深度学习 Pytorch版》 10.2 注意力汇聚:Nadaraya-Watson 核回归
import torch from torch import nn from d2l import torch as d2l1964 年提出的 Nadaraya-Watson 核回归模型是一个简单但完整的例子,可以用于演示具有注意力机制的机器学习。 10.2.1 生成数据集 根据下面的非线性函数生成一个人工数据集,其中噪声项 …...
测试C#调用Windows Media Player组件
新建基于.net framework的Winform项目,可以通过添加引用的方式选择COM组件中的Windows Media Player组件,如下图所示: 也可以在VS2022的工具箱空白处点右键,选择“选择项…”菜单。 在弹出的选择工具箱项窗口中…...
面试经典150题——Day20
文章目录 一、题目二、题解 一、题目 14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string “”. Example 1: Input: strs [“flower”,“flow”…...
[SQL开发笔记]AND OR运算符复杂表达式开发实例
结合 AND & OR实例:通过圆括号使用and或or来组成复杂的表达式 目标数据库及表:使用 DRobot数据库,"T_Drobot" 表 假设我们需要查询"T_Drobot" 表,并从"T_Drobot"表中查询选取creator为 "…...
如何将本地 PDF 文件进行翻译
在日常工作和学习中,我们经常会遇到需要翻译 PDF 文件的情况。比如,我们需要将一份英文的技术文档翻译成中文,或者将一份中文的法律文件翻译成英文。 传统上,我们可以使用专业翻译软件或服务来翻译 PDF 文件。但是,这…...
Node.js的readline模块 命令行交互的模块
Node.js是一个非常流行的JavaScript运行时环境,它提供了许多内置模块来帮助我们开发应用程序。其中之一是readline模块,它提供了一种简单的方法来读取用户输入并进行交互。 本文将详细介绍readline模块的API和使用案例,并附有代码注释。 re…...
前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读
前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…...
2023秋招笔试算法Python3题解
诸神缄默不语-个人CSDN博文目录 签两方了,感觉秋招已经结束了,所以发布一下之前写的笔试编程题题解。 不全。可能有些题我会继续补。 不保证能过。 后续依然有可能继续刷算法题,但是就另外专门写博文来解析了。 打码是因为原则上其实是不让公…...
uniapp--点击上传图片到oss再保存数据给后端接口
项目采用uniapp与uview2.0组件库 --1.0的也可以参考一下,大差不差 一、项目要求与样式图 点击上传n张图片到oss,然后点击提交给后端 二、思路 1、打开上传按钮,弹出框内出现上传图片和提交按钮 2、点击上传图片区域,打开本地图…...
创建Secret(使用kubectl)
创建Secret(使用kubectl) 假设某个 Pod 需要访问数据库。在您执行 kubectl 命令所在机器的当前目录,创建文件 ./username.txt 文件和 ./password.txt 暂存数据库的用户名和密码,后续我们根据这两个文件配置 kubernetes secrets。…...
新手福音,用快马平台可视化学习apifox接口调用与测试
作为一个刚接触API开发的新手,第一次看到各种接口文档时完全摸不着头脑。直到发现了Apifox这个工具,配合InsCode(快马)平台的智能生成功能,终于找到了最适合新手的可视化学习路径。下面分享我的学习心得: 为什么选择Apifox作为入门…...
3分钟快速上手:使用image2cpp免费在线工具将图像转换为Arduino字节数组
3分钟快速上手:使用image2cpp免费在线工具将图像转换为Arduino字节数组 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp image2cpp图像转换工具是嵌入式开发者的得力助手,这个强大的免费在线工具能够将普通图…...
角谷猜想/考拉兹猜想:3N+1
角谷猜想的转化:一切自然数转化为形如3^n-1的自然数???作者: 3n1/3^n-1/GrainShell/谷壳(加壳/脱壳) 2026-04-02 角谷猜想,又叫3N1猜想,又叫collatz,谐…...
Qwen3-TTS-12Hz-1.7B-Base语音克隆质量评测:与原声对比分析
Qwen3-TTS-12Hz-1.7B-Base语音克隆质量评测:与原声对比分析 1. 引言 语音克隆技术近年来发展迅猛,但真正能做到"以假乱真"的模型并不多见。Qwen3-TTS-12Hz-1.7B-Base作为阿里云最新开源的语音合成模型,号称仅需3秒音频就能克隆任…...
【100%通过率】华为OD机试真题2026双机位C卷 C++ 实现【红黑图】
目录 题目 思路 Code 题目 众所周知红黑树时一种平衡树,它最突出的特性就是不能有两个相连的红色节点。那我们定义一个红黑图,也就是一张无向图中,每个节点可能是红黑两种颜色,但我们保证没有两个相邻的红色节点。 现在给一张未染色的无向图,只能染红黑两种颜色,问总共…...
城通网盘终极下载加速指南:三步解锁高速通道的完整教程
城通网盘终极下载加速指南:三步解锁高速通道的完整教程 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载速度慢如蜗牛而烦恼吗?每天都有无数用户因为城通网盘的…...
OpenClaw隐私保护方案:Qwen3-32B-Chat镜像本地处理敏感数据
OpenClaw隐私保护方案:Qwen3-32B-Chat镜像本地处理敏感数据 1. 为什么金融数据必须留在本地? 上个月我帮一位做私募基金的朋友解决了个棘手问题:他们每天需要处理上百份含客户持仓数据的PDF报告,但现有SaaS工具要求上传文件到云…...
EcomGPT-7B电商大模型网络安全应用:智能识别钓鱼商品与欺诈文案
EcomGPT-7B电商大模型网络安全应用:智能识别钓鱼商品与欺诈文案 最近和几个做电商平台的朋友聊天,他们都在头疼同一个问题:平台上的商品和文案越来越“花”,有些商家为了引流,标题和描述写得天花乱坠,甚至…...
Vue项目调试神器Code-Inspector-Plugin全适配指南:从Vite、Webpack到Nuxt.js
Vue项目调试神器Code-Inspector-Plugin全适配指南:从Vite、Webpack到Nuxt.js 在Vue生态中,开发效率的提升往往依赖于工具的精准选择。当项目规模扩大、组件层级加深时,如何在浏览器中快速定位到源代码中的对应位置,成为影响开发体…...
搞不定CAN总线匹配电阻?实测告诉你120Ω电阻怎么加、阻值怎么测、位置怎么放才不出错
CAN总线终端电阻实战指南:从原理到排错的完整解决方案 当你的CAN总线通信频繁出现TxError或NO ACK错误时,终端电阻配置往往是第一个需要检查的环节。许多工程师虽然知道"两端各加120Ω电阻"的基本原则,但在实际项目中仍然会犯各种看…...
