优雅替代ifelse判断逻辑-创新互联
参考内容: 去除多余的if else, 5种方式你知道几种, 优化if else的几种方式
最初的逻辑
// 根据员工类型,输出不同的工资
public void getSalary(String person){
if(StringUtils.equals("BOSS", person)){
System.out.println("Boss salary 10000000");
}else if(StringUtils.equals("MANAGER", person)){
System.out.println("Manager salary 10000");
}else if(StringUtils.equals("STAFF", person)){
System.out.println("Staff salary 100");
}
}
工厂模式解决方案
新建抽象类,有获取工资的抽象方法
创新互联为企业级客户提高一站式互联网+设计服务,主要包括成都做网站、成都网站制作、app开发定制、成都小程序开发、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。public abstract class Salary { abstract void getSalary(); }
三个不同的类 实现该方法
public class Boss extends Salary { @Override public void getSalary() { System.out.println("Boss salary 10000000"); } } public class Manager extends Salary { @Override public void getSalary() { System.out.println("Manager salary 10000"); } } public class Staff extends Salary { @Override public void getSalary() { System.out.println("Staff salary 100"); } }
静态工厂方式,提供获取工资方法调用
public class TestSalary { static Map
data = new HashMap<>(); static { data.put("BOSS", new Boss()); data.put("MANAGER", new Manager()); data.put("STAFF", new Staff()); } public static void main(String[] args) { getSalary("MANAGER"); } static void getSalary(String person){ data.get(person).getSalary(); } }
枚举解决方案
枚举类 内有抽象方法以及不同枚举值的实现
public enum Salary { BOSS{ @Override void getSalary() { System.out.println("Boss salary 10000000"); } }, MANAGER{ @Override void getSalary() { System.out.println("Manager salary 10000"); } }, STAFF{ @Override void getSalary() { System.out.println("Staff salary 100"); } }; abstract void getSalary(); }
直接调用该枚举的抽象方法即可
public class TestSalary { public static void main(String[] args) { getSalary(Salary.valueOf("BOSS")); } public static void getSalary(Salary salary){ salary.getSalary(); } }
springboot 策略模式注解方式
新建抽象类
public abstract class Salary { abstract void getSalary(); }
三个不同实现,实现该方法
@Service("BOSS") public class Boss extends Salary { @Override public void getSalary() { System.out.println("Boss salary 10000000"); } } @Service("MANAGER") public class Manager extends Salary { @Override public void getSalary() { System.out.println("Manager salary 10000"); } } @Service("STAFF") public class Staff extends Salary { @Override public void getSalary() { System.out.println("Staff salary 100"); } }
上下文切换类
@Component("salaryContext") public class SalaryContext { @Autowired private final Map
salaryMap = new ConcurrentHashMap<>(3); public void getSalary(String serviceName) { salaryMap.get(serviceName).getSalary(); } } 测试类
@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class ApplicationTests { @Resource private SalaryContext salaryContext; @Test public void contextLoads() { } @Test public void getSalary() { salaryContext.getSalary("BOSS"); } }
注意:调试中,出现bean注入失败的原因,可以从以下顺序找问题(参考内容1, 参考内容2):
- 首先检测测试类包名和启动类包名是否一致
- @SpringBootTest(classes = Application.class) application为该项目的正常启动类
- @Test导包的是org.junit.Test
- Application记得配置扫描目录 @SpringBootApplication(scanBasePackages = {"com.xxx"})
网页题目:优雅替代ifelse判断逻辑-创新互联
分享URL:http://scyanting.com/article/igojc.html