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

使用设计模式省去大量的if-elsef分支

 1.测试类

    @Testpublic void test7() {/*** 使用设计模式前*///模拟入参String name = "?";if("张三".equals(name)){System.out.println("按照张三的策略执行的任务!");}else if ("李四".equals(name)){System.out.println("按照李四的策略执行的任务!");}else if("王五".equals(name)){System.out.println("按照王五的策略执行的任务!");}//随着业务需求的叠加,不断将加长分支语句,冗余,不优雅,高耦合,不好维护/*** 使用设计模式后*///模拟入参String name1 = "张三";String name2 = "李四";//工厂模式ZhangSanHandler zhangSanHandler = (ZhangSanHandler) PersonHandlerFactory.getPersonHandlerByName(name1);//策略模式 + 模板设计模式zhangSanHandler.invokeStrategy(name1);LiSiHandler liSiHandler = (LiSiHandler) PersonHandlerFactory.getPersonHandlerByName(name2);liSiHandler.invokeStrategy(name2);/** 总结: 工厂模式 + 策略模式 == 不同的人干不同的活* 好处省去了大量的if-else,业务不同策略不同,新建继承模板类HandlerTemplate就好了*/}

 2. 抽象模板类

package com.dj.springtest.template;import org.springframework.beans.factory.InitializingBean;/*** User: ldj* Date: 2023/10/29* Time: 15:14* Description: 使用策略模式 + 工厂模式 + 模板方法模式,消除代理大量冗余的if-else*//*** 策略模式 + 模板方法模式 (因为是抽象类有默认的实现,子类的方法不需要全部重写)*/
public abstract class HandlerTemplate implements InitializingBean {//策略Aprotected void strategyA(String name) {throw new UnsupportedOperationException();}//策略Bprotected void strategyB(String name) {throw new UnsupportedOperationException();}//策略C..
}

3. 模板实现类 

package com.dj.springtest.component;import com.dj.springtest.template.HandlerTemplate;
import com.dj.springtest.factory.PersonHandlerFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;/*** User: ldj* Date: 2023/10/29* Time: 17:10* Description: 继承抽象模板HandlerTemplate刻画出需要的实例,并将实例注册到自定义Bean容器*/
@Slf4j
@Component
public class LiSiHandler extends HandlerTemplate {//调用策略public void invokeStrategy(String name){strategyB(name);}//重写策略模板B@Overrideprotected void strategyB(String name) {System.out.println("按照" + name + "的策略执行的任务!");}//Bean初始化完成交给工厂管理@Overridepublic void afterPropertiesSet() throws Exception {PersonHandlerFactory.register("李四", this);}
}@Slf4j
@Component
public class ZhangSanHandler extends HandlerTemplate {//调用策略public void invokeStrategy(String name){strategyA(name);}//重写策略模板A@Overridepublic void strategyA(String name) {System.out.println("按照" + name + "的策略执行的任务!");}//在当前Bean完成属性初始化时,会自动调用该方法@Overridepublic void afterPropertiesSet() throws Exception {PersonHandlerFactory.register("张三", this);}
}

 4. 简单工厂类

package com.dj.springtest.factory;import com.dj.springtest.template.HandlerTemplate;
import com.dj.springtest.utils.ExceptionUtil;
import org.apache.commons.lang3.StringUtils;import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;/*** User: ldj* Date: 2023/10/29* Time: 15:24* Description: 简单工厂模式*/
public class PersonHandlerFactory {private static final Map<String, HandlerTemplate> strategyMap = new ConcurrentHashMap<>();public static HandlerTemplate getPersonHandlerByName(String name) {return strategyMap.get(name);}public static void register(String name, HandlerTemplate handlerTemplate) {ExceptionUtil.isTrue(StringUtils.isBlank(name) || Objects.isNull(handlerTemplate)).throwException(null, name + "Handler注册失败!", null);strategyMap.put(name, handlerTemplate);}
}

http://www.lryc.cn/news/212011.html

相关文章:

  • Tomcat安装与配置文件解读
  • 计算机网络重点概念整理-第一章 计算机网络概述【期末复习|考研复习】
  • Day 11 python学习笔记
  • HarmonyOS鸿蒙原生应用开发设计- 图标库
  • 微软bing大声朗读文档或网页卡顿老是中断,用离线的huihui就很流畅但没那么自然
  • Java VMTranslator Part I
  • ES6带来那些js新特性?
  • js数组深拷贝汇总
  • 错误 LNK1112 模块计算机类型“x64”与目标计算机类型“X86”冲突
  • java八股文(基础篇)
  • window系统修改rabbitmq 默认端口
  • 七人拼团模式:颠覆你的购物观念,499元产品让你赚翻天!
  • 【机器学习合集】模型设计之卷积核设计 ->(个人学习记录笔记)
  • JS实现用户二次确认后再提交表单
  • 1992-2021年全国各省经过矫正的夜间灯光数据(GNLD、VIIRS)
  • JMeter的使用——傻瓜式学习【中】
  • MyBaties存储和查询json格式的数据(实体存储查询版本)
  • 动态规划14:一和零
  • C#WPF嵌入字体实例
  • Linux——Linux权限
  • android中gradle的kotlin编译配置选项
  • 【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】(最大似然估计量和最大似然估计值的区别)
  • NOIP2023模拟6联测27 点餐
  • AMEYA360:类比半导体重磅发布车规级智能高边驱动HD7xxxQ系列
  • 【HarmonyOS】鸿蒙操作系统架构
  • JSON数据
  • 金融领域:怎么保持电力系统连续供应?
  • 批量重命名文件夹:用数字随机重命名法管理您的文件夹
  • RPC与HTTP的关系
  • OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验