场景描述:
需要写一个消息推送模板的方法,以前是根据不同的枚举值else if查询组装不同的消息模板文言,
以前的代码是这样的:
后期如果在加枚举,代码会越来越繁杂。。。
打算使用策略模式来干掉if else,这是优化后的代码,这块就一行代码搞定
具体逻辑:
1:创建枚举类,枚举if-else语句中可能的操作。
2 :抽取公共方法形成接口(按照每个if分支内执行的逻辑进行抽取),并且将每个if分支重构成一个该接口的实现类。
然后定一个client类,这个类里面定义dohandler方法。
当项目启动时client类初始化,自动将所有的manager类加载到自己的map映射里面,key为对应逻辑的枚举,value为执行对应独立方法。
③ 采用一个map保存枚举变量和策略类的对应关系,即Map<枚举变量, 策略类>。方便我们通过枚举变量代表的操作类型获取到对应的策略类。
当调用client的dohandler的方法时候,传入枚举,根据枚举从map里面找到对应的逻辑处理接口实现类方法对象。
————————————————
下来具体描述下实现:
1,抽取公共方法形成接口并实现:推送服务消息模板服务类
2,写一个初始化容器加载bean的类
3,投诉推送客户端
* 1,当容器初始化时:组装 ComplaintPushType枚举类的description --> 执行独立方法对象 的映射关系(存入map)
* 2,当客户端被调用doHandler时:执行映射关系对应的代码逻辑
调用时传入枚举和业务参数,根据枚举从map里面找到对应的manager实现类方法对象(当项目启动时client类初始化,自动将所有的manager类加载到自己的map映射里面,key为对应逻辑的枚举,value为执行对应独立方法)。执行对应模板方法
complaintPushClient.doHandler(complaintPushDTO.getComplaintPushType().getDescription(),complaintPushDTO);