一、先给大家展示一下我们经常用的到优化:
二、下面我们就是用策略+工厂模式去优化:
1、先创建一个教师接口工厂(TeacherService)
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 教师接口
**/
public interface TeacherService {
/**
* 你是什么科目的教师
*/
void youAreWhatSubjectTeacher();
}
2、创建 语文教师(ChineseTeacher)、数学教师(MathTeacher)、英语教师(EnglishTeacher)、历史教师(HistoryTeacher) 去实现TeacherService 中的youAreWhatSubjectTeacher方法
语文教师:
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 语文教师
**/
public class ChineseTeacher implements TeacherService {
@Override
public void youAreWhatSubjectTeacher() {
System.out.println("chineseTeacher->factory");
}
}
数学教师:
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 数学教师
**/
public class MathTeacher implements TeacherService {
@Override
public void youAreWhatSubjectTeacher() {
System.out.println("mathTeacher->factory");
}
}
英语教师:
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 英语教师
**/
public class EnglishTeacher implements TeacherService {
@Override
public void youAreWhatSubjectTeacher() {
System.out.println("englishTeacher->factory");
}
}
历史教师:
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 历史教师
**/
public class HistoryTeacher implements TeacherService {
@Override
public void youAreWhatSubjectTeacher() {
System.out.println("historyTeacher->factory");
}
}
3、创建一个教师策略+工厂类 TeacherFactory
package com.liu;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description: 教师策略+工厂
**/
public class TeacherFactory {
/**
* 教师工厂
*/
private static final Map<String, TeacherService> bean = new HashMap<>();
/**
* 初始化教师工厂实现类
*/
static {
bean.put("chinese", new ChineseTeacher());
bean.put("math", new MathTeacher());
bean.put("english", new EnglishTeacher());
bean.put("history", new HistoryTeacher());
}
/**
* 策略执行对应key 的教师实现类
* @param subjectName 科目名称
* @return TeacherService
*/
public static TeacherService getSubjectTeacher(String subjectName) {
return bean.get(subjectName);
}
}
三、测试:
测试代码:
package com.liu;
/**
* @Author: LiuRunYong
* @Date: 2020-11-13
* @Description:
**/
public class TestIfElseFactory {
public static void main(String[] args) {
String subjectName = "chinese";
/**
* 使用if-else结构
*/
if("chinese".equals(subjectName)){
System.out.println("chineseTeacher->ifElse");
}else if("math".equals(subjectName)){
System.out.println("mathTeacher->ifElse");
}else if("english".equals(subjectName)){
System.out.println("englishTeacher->ifElse");
}else if("history".equals(subjectName)){
System.out.println("historyTeacher->ifElse");
}else {
System.out.println("otherTeacher->ifElse");
}
/**
* 使用 switch (jdk>=1.7)
*/
switch (subjectName) {
case "chinese": System.out.println("chineseTeacher->switchCase");break;
case "math":System.out.println("mathTeacher->switchCase");break;
case "english":System.out.println("englishTeacher->switchCase");break;
case "history":System.out.println("historyTeacher->switchCase");break;
default:System.out.println("otherTeacher->switchCase");
}
/**
* 使用策略+工厂
*/
TeacherFactory.getSubjectTeacher("chinese").youAreWhatSubjectTeacher();
}
}