策略模式+工厂方法消除if...else
程序员文章站
2022-04-10 15:45:15
今天来讲一下如何通过策略模式和工厂方法来消除累赘的if...else,具体什么是策略模式,大家可以自行百度学习,我就不再这里做过多的介绍了。 注意:如果业务场景简单,建议使用if...else,因为代码逻辑简单,便于理解 策略接口 策略类 策略上下文 策略工厂类 测试 测试结果: 第一次写博客,写的 ......
今天来讲一下如何通过策略模式和工厂方法来消除累赘的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); } }
测试结果:
吃苹果
第一次写博客,写的不好的地方,还望大家留言指教!