策略模式+工厂方法消除if...else

匿名 (未验证) 提交于 2019-12-02 21:52:03

今天来讲一下如何通过策略模式和工厂方法来消除累赘的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);     } }

测试结果:

吃苹果

第一次写博客,写的不好的地方,还望大家留言指教!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!