重构_使用设计模式替代多重判断
Posted 大数据江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重构_使用设计模式替代多重判断相关的知识,希望对你有一定的参考价值。
开发中常常会遇到多重 if 判断的问题,多重判断不仅使代码显得臃肿,而且也是无法支持开闭原则的,复杂的判断会大大降低代码的可读性。
下面是使用 策略模式 + 工厂模式 替代多重判断的小 Demo。
1.先写一个策略接口,后面所有策略要实现这个接口
/**
* 策略接口
* @author fan
*
*/
public interface Strategy {
//执行的方法,由于java中方法的执行,对象会根据具体类型执行对应子类的方法,所以实际实现中会执行对应子类的方法(自认为这个原理是策略模式的根本)
public void operate();
}
2.编写具体策略类,具体策略中实现接口的方法,写出具体策略方案
/**
* 策略A
* @author fan
*
*/
public class StrategyA implements Strategy{
public void operate() {
System.out.println("如若是A情况,执行此方法。。。。");
}
}
/**
* 策略B
* @author fan
*
*/
public class StrategyB implements Strategy {
public void operate() {
System.out.println("如若是B情况,执行此方法。。。。");
}
}
3.准备一个枚举类,保存具体策略类类型
/**
* 策略枚举(增加新策略时需要添加数据)
* @author fan
*/
public enum StatusEnum {
StrateryA("study.strategy.StrategyA"),
StrateryB("study.strategy.StrategyB");
String value = "";
private StatusEnum(String value){
this.value = value;
}
public String getvalue(){
return this.value;
}
}
4.创建工厂方法,创建具体策略类
/**
* 生成具体策略工厂方法
* @author fan
*
*/
public class StrategyFactory {
public static Strategy getStrategy(StatusEnum status){
Strategy strategy = null;
try {
strategy = (Strategy) Class.forName(status.getvalue()).newInstance();
} catch (Exception e) {
e.printStackTrace();
System.out.println("生成策略出错");
}
return strategy;
}
}
5.对策略执行进行封装,以便不影响业务逻辑的处理,实现与业务逻辑的分离,降低代码耦合度
/**
* 封装执行的操作
* @author fan
*
*/
public class StrategyFacade {
/**
* 实际执行的策略
* @param number
* @return
*/
public static boolean doOperate(int number){
Strategy strategy = StrategyFactory.getStrategy(getStrategyType(number));
strategy.operate();
return true;
}
/**
* 根据烈性条件生成不同的策略(使用策略场景变化是需要修改)
* @param number
* @return
*/
private static StatusEnum getStrategyType(int number){
if(number > 10){
return StatusEnum.StrateryB;
}else{
return StatusEnum.StrateryA;
}
}
}
6. 测试
/**
* 策略模式+工厂模式
* @author fan
* @version 1.0 使用策略发生变化时,需要修改1.封装策略类的具体声测策略方法 2.策略枚举类 增加新的策略 3.创建新的策略类并实现其具体方法
*/
public class StrategyTest {
public static void main(String[] args) {
int number = 10;
//业务模块就一行代码搞定了,即使策略变化,或者使用策略的具体方案变了,我们只要修改策略代码就好了,业务代码不需要变化
StrategyFacade.doOperate(number);
}
}
测试结果为 : number 为10 所以执行A策略
本文完。
原文链接:
https://blog.csdn.net/kai763253075/article/details/52496741
遇见就是缘分,关注一下,我写的就更来劲儿啦
以上是关于重构_使用设计模式替代多重判断的主要内容,如果未能解决你的问题,请参考以下文章
扎实基础_设计模式_行为型_观察者模式(项目实战,使用委托注册事情,消除多重判断)