今天来讲一下如何通过策略模式和工厂方法来消除累赘的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); } }
测试结果:
吃苹果
第一次写博客,写的不好的地方,还望大家留言指教!
来源:博客园
作者:fztomaster
链接:https://www.cnblogs.com/fztomaster/p/11434405.html