使用传统的if else扩展性不强,代码量越多阅读起来越困难
如果后期又要扩展条件语句维护起来就会变得非常的麻烦
/**
* 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a,b,c,d四个字符中的任意一个");
String traditionIfElse = scanner.next();
//四层if else 看起来还好 但是如果代码量的增加就会导致阅读性越来越低
if ("a".equals(traditionIfElse)){
System.out.println("a");
}else if ("b".equals(traditionIfElse)){
System.out.println("b");
}else if ("c".equals(traditionIfElse)){
System.out.println("c");
}else if ("d".equals(traditionIfElse)){
System.out.println("d");
}else {
System.out.println("瞎瘠薄输入");
}
}
执行效果
因此我们可以用策略模式来优化if else的代码让它变得更加的精简
统一的访问路径
public interface StrategyContext {
/**
* 文本输入
* @param
* @return
*/
String strategyTest();
}
A实现类
public class AtypeImplementation implements StrategyContext {
@Override
public String strategyTest() {return "a";}
}
B实现类
public class BtypeImplementation implements StrategyContext {
@Override
public String strategyTest(){return "b";}
}
C实现类
public class CtypeImplementation implements StrategyContext {
@Override
public String strategyTest() {
return "c";
}
}
D实现类
public class DtypeImplementation implements StrategyContext {
@Override
public String strategyTest() {
return "d";
}
}
在使用枚举类型做工厂模式
public enum StrategyEnum {
a("a",new AtypeImplementation()),
b("b",new BtypeImplementation()),
c("c",new CtypeImplementation()),
d("d",new DtypeImplementation())
;
private String text;
private StrategyContext strategyContext;
StrategyEnum(String text, StrategyContext strategyContext) {
this.text = text;
this.strategyContext = strategyContext;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public StrategyContext getStrategyContext() {
return strategyContext;
}
public void setStrategyContext(StrategyContext strategyContext) {
this.strategyContext = strategyContext;
}
}
main测试
public class StrategyIfElse {
/**
* 使用策略模式优化
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a,b,c,d四个字符中的任意一个");
String traditionIfElse = scanner.next();
//使用枚举值优化if else
StrategyContext strategyContext = StrategyEnum.valueOf(traditionIfElse).getStrategyContext();
System.out.println(strategyContext.strategyTest());
}
}
效果和if else是一样的,但是代码变得精简了,后期的扩展也变得简单明了了
如果配合spring使用的话我们可以只需将Bean注入到IOC容器当中 直接使用getBean将实例代码获取出来这样就可以不用写枚举类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)