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}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式:责任链模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《享元模式》 下一篇《解释器模式》 简介: 责任链模式,它是一种行为型设计模式,它将许多对象连接起来形成一条链,每个对象处理不同的请求&#xff0c…

word页脚设置,页脚显示第几页共有几页设置步骤

word页脚设置,页脚显示第几页共有几页设置步骤: 具体步骤: 步骤1: 步骤1.1选择页脚---空白页脚 步骤1.2,在"[在此处键入]",直接输入你需要的格式,如 “第页/共页” 步骤1.3选择第“…

第四部分:JavaScript

一:jQuery 1.1:jQuery介绍 什么是jQuery? jQuery是JavaScript和查询(Query),它是辅助JavaScript开发的js类库 jQuery的核心思想 核心思想是write less,do more,所以它实现了很多浏览…

jmeter BeanShell预处理程序:报错JSONObject not found in namespace

1、jmeter运行报错: ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ". . . : Typed variable declaration : Class: JSONObject not found in namespace WARN o.a.j.m.BeanShellPreProcessor: Problem…

AI:40-基于深度学习的森林火灾识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

【Java】LinkedList 集合

LinkedList集合特点 LinkedList 底层基于双向链表实现增删 效率非常高,查询效率非常低。 LinkedList源码解读分析 LinkedList 是双向链表实现的 ListLinkedList 是非线程安全的(线程是不安全的)LinkedList 元素允许为null,允许重复元素Linked…

2023版 STM32实战12 IIC总线读写AT24C02

IIC简述 一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线 IIC特点 -1- 串行(逐bit传输) -2- 同步(共用时钟线) -3- 半双工(收发不同进行) -4- 总线上的任何设备都可以是主机 开发使用习惯和理解 -1- 通过地址寻址 -2- 数据线的…

Ubuntu20.04下安装MySQL8环境

Ubuntu20.04下安装MySQL8环境 1.下载MySQL客户端和服务器2.配置MySQL3.测试MySQL4.设置MySQL服务开机自启动5.修改root密码MySQL数据库基本使用启动MySQL数据库服务重启MySQL数据库服务停止MySQL数据库服务查看MySQL运行状态设置MySQL服务开机自启动停止MySQL服务开机自启动MyS…

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型,用户作为生产者,线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…

系统架构设计师-第16章-嵌入式系统架构设计理论与实践-软考学习笔记

嵌入式系统( Embedded System) 是为了特定应用而专门构建的计算机系统,其架构是随着嵌入式系统的逐步应用而发展形成的。嵌入式软件架构的设计与嵌入式系统的体系架构是密不可分的。因此,本常首先介绍嵌入式系统硬件相关知识(系统特征、硬件组…

在docker中创建EMQX 加数据卷

1、从虚拟容器中复制出来文件 docker run --rm emqx/emqx:5.3.0 sh -c cd /opt/emqx && tar -c etc | tar -C $PWD -x 2、将这三个文件夹分别赋予最高权限,也可以777可以755 chmod -R 777 data chmod -R 777 etc chmod -R 777 log 3、创建容器代码 docke…

透明安全地解释Moonbeam基金会分配的GLMR去了哪

在GLMR分配比例中,约有16.7%的GLMR分配给了生态支持。这部分GLMR究竟用在了哪里,Moonbeam生态是否还有足够的GLMR扶持生态项目? Moonbeam基金会每隔半年会发布一份GLMR透明度报告,最近的报告日期为2023年7月31日。其中列出了社区…

加解密原理(HCIA)

一、加密技术 1、加密的两个核心组件 2、加密技术作用: 二、加解密技术原理 1、对称加密 2、非对称加密 (1)思考问题? 1)、有了非对称加密为什么还用对称加密? 2)、如何传递秘钥呢&…

【23种设计模式】里氏替换原则

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…

C#:枚举是命名的整形常量的集合

在枚举(enum)中,整形常量指的是一组预定义的整数值,它们代表了枚举类型中的不同取值。这些整数值通常用于表示特定的状态、选项或标识符。 枚举类型是一种自定义的数据类型,它可以用于定义一组相关的命名常量。每个枚…

服务器动态/静态/住宅/原生IP都是什么意思

​  在互联网的世界中,我们经常会听到关于IP地址的各种说法,比如服务器动态IP、静态IP、住宅IP和原生IP。那么这些术语究竟代表着什么意思呢?让我们一起来了解一下。 动态IP 动态IP(Dynamic IP)是指互联网服务提供商(ISP)在每次用户上网时&#xff0c…

Redis中的数据类型以及适用场景

1.Redis中的数据类型 Redis中的数据类型包括:String(字符串)、Hash(字典)、List(列表)、Set(集合)、Sorted Set【Zset】(有序集合)。 Redis 所有的数据结构都是一个key对应一个value,不同类型的数据结构之间的差异就在于value的…

【微信小程序开发】学习小程序的网络请求和数据处理

前言 网络请求是微信小程序中获取数据和与服务器交互的重要方式。微信小程序提供了自己的API来处理网络请求,使得开发者可以轻松地在微信小程序中实现数据的获取和提交。本文将介绍微信小程序中的网络请求,包括使用wx.request发起GET和POST请求&#xf…

jenkins实践篇(1)——基于分支的自动发布

问题背景 想起初来公司时,我们还是在发布机上直接执行发布脚本来运行和部署服务,并且正式环境和测试环境的脚本都在一起,直接手动操作脚本时存在比较大的风险就是将环境部署错误,并且当时脚本部署逻辑还没有检测机制,…

JVM面试知识点整理

文章目录 (一) JVM组成JVM组成部分和运行流程从图中可以看出 JVM 的主要组成部分运行流程:程序计数器Java堆虚拟机栈方法区堆栈的区别是什么? (二) 类加载器双亲委派模型类装载的执行过程 (三) 垃圾回收对象什么时候可以被垃圾回收哪些可以作为根对象 垃…