将策略的bean存进枚举类。 MYSQL("001", "mysql", "mySqlDataSource") 工厂类使用静态方法(类加载顺序,启动时),将枚举类的bean名存进map 将策略算法使用@component注解,意思让spring容器管理Bean。 使用时,通过(code/枚举)(看前端怎么传,后端怎么接收)找到服务名。 拥有服务名,通过SpringBeanUtils获取Bean,然后进...
所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其他模式来补充,比如工厂模式、代理模式)3|0三、代码示例3|11.定义共同的方法和行为package com.ultiwill.strategy; public interface PayStrategy { /** * 共同的行为方法 * @return */ String toPayHtml(); } ...
@GetMapping("test1")publicStringgetTests(String eventType){ValidatorContext validator=newValidatorContext(ValidatorStrategy.XML);validator.runValidation("XML content");} 方法三:枚举+工厂 一、建造枚举类 packagecom.ultiwill.strategy.enums;importorg.apache.commons.lang.StringUtils;publicenumPayEnumStrategy{/...
策略模式的目标之一,是优秀的扩展性和可维护性,最好能新增或修改某一策略类时,对其他类是无改动的。而枚举策略如果过多或者过程复杂,维护是比较困难的,可维护性受限 四、基于工厂的策略模式 为了解决良好的扩展性和可维护性,我更推荐以下利用spring自带beanFactory的优势,实现一个基于工厂的策略模式。 策略类改动只是...
2. 工厂模式(Factory Pattern) 工厂模式提供了一种创建对象的最佳方式。使用工厂模式,当我们不知道最终创建哪个对象时,可以动态地选择创建对象。 示例 假设我们有一个图形绘制系统,不同的图形需要不同的绘制方法。 // 定义产品接口 interface Shape { void draw(); ...
三、基于枚举的策略模式 四、基于工厂的策略模式 一、为什么讲策略模式 策略模式,应该是工作中比较常用的设计模式,调用方自己选择用哪一种策略完成对数据的操作,也就是“一个类的行为或其算法可以在运行时更改” 我个人的理解是 将一些除了过程不同其他都一样的函数封装成策略,然后调用方自己去选择想让数据执行什么...
策略模式+工厂模式(反射)+枚举代替 大量 if..else if.. 实际项目中我们经常碰到需要使用if…else…if的分支判断这种情况。 这种写法带来一些弊端。 一旦分支多太多,逻辑复杂,会导致代码十分冗长,增加阅读难度。 如果需要增加或减少分支,需要改动if…elseif,增大因代码改动而出错的风险。
这些策略如何在合适的时机使用呢?在讲策略模式的时候,我们是借助一个环境类,持有抽象策略的引用,然后初始化该环境类的时候,传进来一个具体策略对象赋值给抽象策略。 这次讲解的是整合工厂模式,使用静态工厂方法,根据入参来从内存中找到早已初始化好的具体策略对象,即枚举中的实例对象。
2、使用工厂模式+策略设计模式,同时结合SpringBoot注解选择不同的策略,实现不同的业务逻辑。 代码示例 定义枚举 @AllArgsConstructor@GetterpublicenumSaleOrderEnum{SHOP_SALE_ORDER("10001","店铺业务零售单"),SUPPLY_SALE_ORDER("10002","供应链直销单"),;privatestaticfinalMap<Long,SaleOrderEnum>ORDER_MAP=newHa...
以上的情况出现了多层的if-else嵌套,除此之外,以后如果需求再有变动,需要再增加一个用户等级,那么又会再次添加if-else的嵌套判断,那么如何解决上述的弊端呢,采用策略模式和工厂模式的搭配使用,可以很好地优化多层if-else的多层嵌套 实现 (1)定义枚举类,用于决定执行什么策略 ...