来自:https://blog.csdn.net/hncu1306602liuqiang 看到crossover Jie的文章《利用策略模式优化过多if else 代码》后受到启发,可以利用策略模式简化过多的...if else代码。...if..else实现 * 2:使用策略模式实现 */ AOrderTypeHandler instance = handlerContext.getInstance...handlerMap.get(type); if (clazz == null) { throw new IllegalArgumentException("该类型没有在枚举...OrderTypeHandlerAnno中定义,请定义:" + type); } return clazz; } } /** * 策略模式,处理type与实现类的映射关系
订单实体: service接口: 传统实现 根据订单类型写一堆的if else: 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: 可以看到上面的方法中注入了HandlerContext...现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个订单类型,就对应有多少个处理器。...HandlerProcessor: ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,在spring处理bean前,将自定义的...总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。...本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为订单的类型,相信你能想到更多更好的方法。
传统实现 根据订单类型写一堆的if else: ? 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: ?...现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个订单类型,就对应有多少个处理器。...ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,在spring处理bean前,将自定义的bean注册到容器中。...总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。...本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为订单的类型,相信你能想到更多更好的方法。
% dessert.title()) # elif = else + if 当前值不符合上面 if 的判断条件,执行 elif 的判断条件 else: print("I like %s...: print("I hate %s." % dessert) # 当前值不符合上面所有的判断条件,就执行 else 里的语句 # 当然如果这个else 不需要的话,可以不写 else...if None: # None 是 Python 中特殊的对象 print("True.") else: print("False.") # 结果是这个 if 1: print("True....") # 结果是这个 else: print("False.")...: print("正数") else: print("负数") 到此这篇关于python中if及if-else如何使用的文章就介绍到这了,更多相关python中条件语句总结内容请搜索ZaLou.Cn
python异常中else的使用 说明 1、当确定没有异常后,还需要做一些事情可以使用else语句。 2、注意:try中没有异常,else之后的代码才会被执行。...value) except Exception as e: # 发生异常时执行 print('不正确的输入:', e) print('请重新输入') else...: # 未发生异常时执行 break 以上就是python异常中else的使用,希望对大家有所帮助。
在 这本书中并不推荐用 for else语句 因为它不符合 编程语言的基本语法, 事实上这种语句更像是 try: ...# ...... except: # ...... else: # ...... finally: # .........这里面有三个for循环, 其中第二个循环中有个嵌套for ... else ......语句 这种表达方法可做的事情 就是查找一个列表中是否包含另一个列表中的元素, 再举一个实际的例子-- 注: repr() 可以使输出的字符串自动加上引号 >>> list1 = ["apple","spirit...else: ... print repr(i), "not found" ... 'pac' not found 'tea' not found >>>
mybatis中if-else要用choose-when-otherwise <when test="page !=null and page.orderBy !
在 python 中,while … else 在循环条件为 false 时执行 else 语句块: 实例 #!.../usr/bin/python count = 0 while count < 5: print count, " is less than 5" count = count + 1 else:...than 5 3 is less than 5 4 is less than 5 5 is not less than 5 ---- 简单语句组 类似 if 语句的语法,如果你的 while 循环体中只有一条语句...,你可以将该语句与while写在同一行中, 如下所示: 实例 #!...注意:以上的无限循环你可以使用 CTRL+C 来中断循环。
try: except : #如果在try部份引发了名为'name'的异常,则执行这段代码 else: ...#如果没有异常发生,则执行这段代码 ##错误判断的代码 ##其中,想让文件写东西,在open一个文件的时候需要给r+ try: file = open('/home/zbx/桌面/abcd','...if input_text == 'y': file = open('/home/zbx/桌面/abcd','w') else: pass else: file.write
其实,if-else是有办法可以消除掉的,其中比较典型的并且使用广泛的就是借助策略模式和工厂模式,准确的说是利用这两个设计模式的思想,彻底消灭代码中的if-else。...这个例子以及策略模式的相关知识,读者可以在《如何给女朋友解释什么是策略模式?》一文中学习。 但是,真正在代码中使用,比如在一个web项目中使用,上面这个Demo根本没办法直接用。...其实,在之前的《如何给女朋友解释什么是策略模式?》一文中,我们介绍了很多策略模式的优点。但是,策略模式的使用上,还是有一个比较大的缺点的: 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。...也就是说,虽然在计算价格的时候没有if-else了,但是选择具体的策略的时候还是不可避免的还是要有一些if-else。...比如使用枚举,或者在每个策略类中自定义一个getUserType方法,各自实现即可。
java如何消除太多的if else判断?...让我们看看能否使用别的方式来做呢。.../聚合,尽量不使用类继承。...2.示例 一、if-else 写法 ? 二、case-switch 写法 ? 三、 工厂方式重构 ? ? ? 四、 枚举方式重构(推荐) ? ?...5.小结 为了更好的代码重用性,可读性,可靠性,可维护性,我们会尝试将IF/ELSE或者case-switch进行改造,使用工厂方法,枚举方法,命令模式,规则引擎方式不同方法进行尝试,最后使用设计模式的六大原则对代码进行评估
1、python中实现密码密文输入 #!...username and _userpasswd == userpasswd: print("Welcome usr {name} login...".format(name=username)) else...int(input("age:")) if _age == age: print("right") elif _age > age: print("think smaller...") else...#Note: if 条件判断: ... elif 条件判断: ... else: ...
index is 2,name is jin index is 3,name is xie index is 4,name is xu for语句中的range()函数 如果你需要遍历数字序列,可以使用内置...语句 Python编程中if语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句........else : 执行语句4........or(或),表示两个条件有一个成立时判断条件即成立;表示两个条件同时成立的情况下,判断条件才成立,可以使用and(与),实例如下: num = 10 if num > 0 or num < 10 :...D:/PycharmProjects/pythonz/z.py hello hello undefine while循环 Python编程中while循环语句用于循环执行程序,即在某条件下,循环执行某段程序
一、需求背景 部门通常指的是在一个组织或企业中组成的若干人员,他们共同从事某一特定工作,完成共同的任务和目标。...在组织或企业中,部门通常是按照职能、工作性质或业务范畴等因素进行划分的,如财务部门、人力资源部门、市场部门等。...部门编号通常由公司或组织的管理人员根据实际情况进行规划和安排,各个部门的编号应当具有独立性、唯一性和易于记忆等特点,以方便在日常管理活动中使用。...但在开发过程中,如果不建立数据表,则需要用选择结构进行判断赋值,所以就产生了大量的 if-else 代码。 本文的目标,就是消除这些 if-else 代码,用更高级的方法来实现!...三、基础工作 同学们在创建完成项目之后,在 cn.zwz.entity 新建一个 User 员工类,如下图所示。 在员工类中定义 部门编号 和 姓名 两个字段,代码如下。
大家都写过这样的代码 if (conditionA) { 逻辑1 } else if (conditionB) { 逻辑2 } else if (conditionC) { 逻辑...3 } else { 逻辑4 } 这种代码虽然写起来简单,但是很明显违反了面向对象的 2 个基本原则: 单一职责原则(一个类应该只有一个发生变化的原因):因为之后修改任何一个逻辑,当前类都会被修改...开闭原则(对扩展开放,对修改关闭):如果此时需要添加(删除)某个逻辑,那么不可避免的要修改原来的代码 因为违反了以上两个原则,尤其是当 if-else 块中的代码量比较大时,后续代码的扩展和维护就会逐渐变得非常困难且容易出错...if-else 不超过 2 层,块中代码 1~5 行,直接写到块中,否则封装为方法 if-else 超过 2 层,且块中代码超过 3 行,尽量使用策略模式 下面是PHP策略模式的demo,需求是当需要发送各种通知的时候...$this->factory->register($t); } } public function doAction(){ //根据传递的type参数 , 选择使用哪一个策略
在介绍更更优雅的编程之前,让我们一起回顾一下,不好的 if...else 代码 02 又臭又长的 if...else 废话不多说,先看看下面的代码。...02 消除 if...else 的锦囊妙计 2.1 使用注解 代码中之所以要用 code 判断使用哪个支付类,是因为 code 和支付类没有一个绑定关系,如果绑定关系存在了,就可以不用判断了。...2.5 责任链模式 这种方式在代码重构时用来消除 if...else 非常有效。 责任链模式:将请求的处理对象像一条长链一般组合起来,形成一条对象链。...2.6 其他的消除 if...else 的方法 当然实际项目开发中使用 if...else 判断的场景非常多,上面只是其中几种场景。下面再列举一下,其他常见的场景。...2.6.4 spring 中的判断 对于参数的异常,越早被发现越好,在 spring 中提供了 Assert 用来帮助我们检测参数是否有效。
现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个代报考类目,就对应有多少个处理器。...具体思路是: 扫描指定包中标有@ExamRuleHandler的类; 将注解中的类型值作为key,对应的类作为value,保存在Map中; 重写 实现ApplicationContextAware接口的...ExamRuleHandlerContext类中,完成上面的功能。...总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。...本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为代报考的类型,相信你能想到更多更好的方法。
改动过程中发现自己代码写的有点混乱,而且现在新增的逻辑代码更是雪上加霜,所以有了今天这篇文章 正文 在最开始的时候我使用枚举来返回请假类型对应基本分数和绩效分数,如下代码。...,当if-else过多的时候,这对于维护会造成很大阻碍,所以我想有没有一种利于后期维护的方案呢?...百度得到答案大多都是使用策略模式,把业务逻辑都控制在每种情况的实体类中,这里我也参考下网上的方式使用策略模式来完成这次逻辑变动(说来惭愧,前面自己还写过策略模式的文章,但是仍然不会实际运用,可见学的东西要真的用起来才能融会贯通...if-else语句,优点很明显, 每个算法单独封装,减少了算法和算法调用者的耦合 合理使用继承有助于提取出算法中的公共部分。...不过可以使用享元模式来减少对象的数量。 ---- 近期小程序会做一次新的升级改动,希望大家能多多关注
if else模式 if ("BATCH_CHANGE_WAREHOUSE".equals(taskType)) { //批量转仓逻辑 } else if (...ApplicationContext applicationContext) throws BeansException { this.context=applicationContext; } 这里是在应用启动的时候...注意是InspectionSolver类型,所以定义的处理器都得继承InspectionSolver,其次是spring容器中的才能加载,所以定义的处理器都得放到spring容器中(@Component...; } //调用不同solver的方法进行处理 solver.solve(orderId,userId); } } 在测试类中我消除了可能一长段的...if else,从选择器InspectionSolverChooser中根据type的不同取出不同的任务处理器InspectionSolver,然后调用其solve()方法进行任务处理,不同处理器调用的当然就是不同的
领取专属 10元无门槛券
手把手带您无忧上云