今天來講一下如何通過策略模式和工廠方法來消除累贅的if...else,具體什么是策略模式,大家可以自行百度學習,我就不再這里做過多的介紹了。
注意:如果業務場景簡單,建議使用if...else,因為代碼邏輯簡單,便於理解
策略接口
Eat.java
/**
* 策略接口
*
*/
public interface Eat {
public void eatFruit(String fruit);
}
策略類
EatApple.java
/**
* 具體的策略類:吃蘋果
*/
public class EatApple implements Eat{
@Override
public void eatFruit(String fruit) {
System.out.println("吃蘋果");
}
}
EatBanana.java
/**
* 具體的策略類:吃香蕉
*/
public class EatBanana implements Eat {
@Override
public void eatFruit(String fruit) {
System.out.println("吃香蕉");
}
}
EatPear.java
/**
* 具體的策略類:吃梨
*/
public class EatPear implements Eat {
@Override
public void eatFruit(String fruit) {
System.out.println("吃梨");
}
}
策略上下文
EatContext.java
/**
* 策略上下文
*/
public class EatContext {
private Eat eat;
public EatContext(Eat eat) {
this.eat = eat;
}
public void eatContext(String fruit) {
eat.eatFruit(fruit);
}
}
策略工廠類
EatFactory.java
/**
* 策略工廠類
*/
public class EatFactory {
private static Map<String, Eat> map = new HashMap<>();
static {
map.put("apple", new EatApple());
map.put("banana", new EatBanana());
map.put("pear", new EatPear());
}
public static Eat getEatStrategy(String fruitType) {
return map.get(fruitType);
}
}
測試
public class Demo {
public static void main(String[] args) {
String fruit = "apple";
// 傳入具體水果類型,得到蘋果策略接口
Eat eat = EatFactory.getEatStrategy(fruit);
// 調用具體策略方法
eat.eatFruit(fruit);
}
}
測試結果:
吃蘋果
第一次寫博客,寫的不好的地方,還望大家留言指教!