策略模式+工厂方法消除if...else
Posted fztomaster
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式+工厂方法消除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);
测试结果:
吃苹果
第一次写博客,写的不好的地方,还望大家留言指教!
以上是关于策略模式+工厂方法消除if...else的主要内容,如果未能解决你的问题,请参考以下文章
在Spring boot项目中使用策略模式消除if-else