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