首页 > 其他分享 >策略模式优化if...else

策略模式优化if...else

时间:2024-04-23 11:48:47浏览次数:21  
标签:info ... log EventType support public else 优化 event

场景

根据第三方系统的事件做出不同动作

优化前

@Slf4j
@RestController
@RequiredArgsConstructor
public class WebHookController {

    @PostMapping("/webhook")
    public ResponseEntity<Object> webhook(@RequestBody JSONObject body) {
		String event = body.getString("event");
		
		if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}else if(event == "***"){
			log.info("==>***事件")
			// do
		}

        return ResponseEntity.ok().build();
	}
}

事件枚举

public enum EventType {
    PROJECT_CREATE,
	TASK_CREATE,
	WORKTIME_CREATE
}

事件处理接口

public interface IEventTemplate{
	void process(JSONObject json)
}

抽奖模板

public abstract class AbstractEventTemplate implements IEventTemplate,InitializingBean{

	public abstract EventType support();

	@Override
	public void afterPropertiesSet() throws Exception{
		EventType[] eventTypes = EventType.values();

		boolean flag = false;
		for(EventType eventType : eventTypes){
			// support方法调用的是子类返回的对象
			EvenType support = support();
			if(support == eventType){
				flag = true;
				break;
			}
		}
	}

	if(!flag){
		throw new RuntimeException("不支持的事件类型");
	}
}

模板实现类

@Component
@Slf4j
public class ProjectCreateTemplate extends AbstractEventTemplate{
	@Override
	public void process(JSONObject json){
		log.info("==> 项目创建")
		// do
	}

	@Override
    public TBEventType support() {
        return EventType.PROJECT_CREATE;
    }
}

上下文

@Component
public class EventContext implements ApplicationContextAware{
	
	private final static Map<EventType,IEventTemplate> eventService = new EnumMap<>(EventType.class);
	
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeanException{
		// 抽象类所有的子类对象 从容器中获取的所有子类对象
		Map<String, AbstractEventTemplate> beansOfType = applicationContext.getBeansOfType(AbstractEventTemplate.class); // 从容器中获取所有的子类对象 key=beanName     value=bean对象

		//循环抽象类的子类
        for (AbstractTBEventTemplate value : beansOfType.values()) {
            EventType support = value.support();
            eventServices.put(support, value);
        }
    }
	

    public IEventTemplate getEventService(TBEventType eventType) {
        return eventServices.get(eventType);
    }	
}

优化后接口

@Slf4j
@RestController
@RequiredArgsConstructor
public class WebHookController {

    @PostMapping("/webhook")
    public ResponseEntity<Object> webhook(@RequestBody JSONObject body) {
		String event = body.getString("event");
		try{
			EventType eventType = EventType.valueOf(event);
	        IEventTemplate eventTemplate = tbEventContext.getEventService(eventType);
	        eventTemplate.process(body);
		}catch (IllegalArgumentException illegalArgumentException) {
            log.info("未知事件:{}", body);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
       }

       return ResponseEntity.ok().build();
	}
}

标签:info,...,log,EventType,support,public,else,优化,event
From: https://www.cnblogs.com/luyifo/p/18152499

相关文章

  • 优化教学模式
    初中阶段,由于学习科目的增多,教学内容的加深,对学生的思维能力、计算能力和想象能力的要求也逐步提高这样不可避免地出现了一批后进生,严重地影响了教学质量的提高。因此,探索后进生的转化途径,是大面积提高数学教学质量的有效途径。面对后进生我们不能放弃,只能转化。后进生并不是智商......
  • O2优化
    1#include<cstdio>2intmain(){3ints=0;4for(inti=0;i<200000;++i)5s+=i;6printf("%d%d",s,s<0);}7不开O2输出:-14749364801开O2输出:-14749364800为什么呢?编译器想:s初值大于等于0,每次都加一个大于等于0的数,结果一定不会......
  • 基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览PSO优化前:      PSO优化后:   2.算法运行软件版本MATLAB2022A  3.算法理论概述       时间序列回归预测是数据分析的重要领域,旨在根据历史数据预测未来时刻的数值。近年来,深度学习模型如卷积神经网络(ConvolutionalNe......
  • 【JavaScript】微信小程序:高效性能优化策略与实践
    ​本文作者:黄启聪,碧桂园服务前端开发高级工程师,专注于运用前沿的Web技术提升工作效率,并致力于打造卓越的交互式用户体验。​01前言目前,凤凰会商城支持全国商城、门店、酒司令、地推、群接龙等多种业务,并且具备多端能力。一套代码可以在凤凰会APP、移动端H5和微信小程序中运行......
  • EasyMR6.2 全面解读:四大功能深度优化,解锁全新大数据处理和计算体验
    在刚刚过去的2024春季发布会上,袋鼠云带来了数栈产品V6.2版本的全新发布。其中,EasyMR作为数栈V6.2中的一项关键能力,代表了袋鼠云对大数据生态的深入理解和持续创新。EasyMR(后文统称EMR)是袋鼠云基于Hadoop、Hive、Spark、Flink、HBase等开源组件,构建的弹性计算引擎,提供安全可靠......
  • Serverless 成本再优化:Knative 支持抢占式实例
    作者:元毅、向先Knative是一款云原生、跨平台的开源Serverless应用编排框架,而抢占式实例是公有云中性价比较高的资源。Knative与抢占式实例的结合可以进一步降低用户资源使用成本。本文介绍如何在Knative中使用抢占式实例。背景信息抢占式实例是一种低成本竞价型实例,您可......
  • 实战剖析-vue项目首屏加载时长优化
     首屏速度是用户体验的最关键一环,而首屏速度最大的决定性因素就是资源的加载速度,资源加载速度等于资源大小+网速,老的前端项目随着不断增长,代码可能会变得混乱,冗余难以理解,不断的做加法,久而久之,前端性能上就会受到影响,相信大家在工作当中一定遇到,页面加载时间慢,响应时间长等......
  • 见鬼了!我家的 WiFi 只有下雨天才能正常使用...
    这是作者大学时期在家里遇到的一个非常奇怪的网络问题,作者的父亲是一名经验丰富的网络工程师,他们家里使用了一个复杂的网络设置,通过Wi-Fi桥接的方式,将父亲公司的高速商业网络连接到家中。但是有一天,作者发现家里的Wi-Fi只有在下雨时才能正常工作。。。事情发生在十多年前,那......
  • Java中用forEach和lamad优化for循环
    1importjava.util.Arrays;2importjava.util.List;3importjava.util.function.IntBinaryOperator;456List<String>names=Arrays.asList("Alice","Bob","Charlie");78//方式一for输出9for(inti=0;i<......
  • php之性能优化案例
    php是一个很流行的脚本语言,现在很多公司(新浪、优酷、百度、搜狐、淘宝等等)在使用这种语言进行网站开发。这篇文章希望能够提高你的php脚本性能。请记住你的php脚本性能,很多时候依赖于你的php版本、你的webserver环境和你的代码的复杂度。优化你代码中的瓶颈Hoare曾经说过“过早......