策略模式+工厂模式-解决if else
Posted yan0219n
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式+工厂模式-解决if else相关的知识,希望对你有一定的参考价值。
public interface strategy extends InitializingBean
void handler(JsonObject z2CmdReq);
public class CtrlInnerPolicyStrategy implements strategy
@Override
public void handler(JsonObject z2CmdReq)
//TODO
@Override
public void afterPropertiesSet()
CmdStrategyFactory.register(CmdTypeConstant.CTRL_INNER_POLICY,this);
@Component
public class CmdStrategyFactory
private static Map<String,Strategy> map = new HashMap<>();
public static Strategy getSpecStrategy(String cmd)
return map.get(cmd);
public static void register(String cmd,Strategy handler)
if(StringUtils.isEmpty() &&null == handler)
return;
map.put(cmd,handler);
使用:
CmdStrategyFactory.getSpecStrategy(z2CmdReq.getCmdType()).handler(JsonObject z2CmdReq);
策略模式+工厂方法消除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的主要内容,如果未能解决你的问题,请参考以下文章