1、前言
学习策略模式,对于大量的if else逻辑可以进行替换,使代码变得更加优雅简洁。
2、编写
①传统if else
使用if else
对arg
进行判断,对于不同的判断进行不同的逻辑操作;
public class Simple {
void simple(String arg){
if ("1".equals(arg)){
//操作1
}else if ("2".equals(arg)){
//操作2
}
}
}
②策略模式(未完成版)
假设传入level为vip等级,对于不同等级进行不同会员等级的操作
一.策略抽象接口
定义一个策略接口,不同VIP等级操作类实现该接口
public interface VIPStrategy {
public void handle();
}
二.策略实现类
一级VIP实现类:
public class VIP1StrategyImpl implements VIPStrategy{
@Override
public void handle() {
System.out.println("会员等级1");
}
}
二级VIP实现类:
public class VIP2StrategyImpl implements VIPStrategy{
@Override
public void handle() {
System.out.println("会员等级2");
}
}
三.策略工厂
通过level参数返回不同的策略实现类,进行操作
public class VIPStrategyFactory {
public static final Map<String,VIPStrategy> map=new HashMap<>();
static {
map.put("vip1",new VIP1StrategyImpl());
map.put("vip2",new VIP2StrategyImpl());
}
public static VIPStrategy getVipStrategy(String level) {
return map.get(level);
}
}
四.对比if else
public class NotGood {
void notGood(String arg){
VIPStrategy vipStrategy = VIPStrategyFactory.getVipStrategy(arg);
vipStrategy.handle();
}
}
③策略模式(完成版)
上面我们使用具体的VIPStrategy
实现类进行了处理,如果我们对VIP需要添加通用方法,可以使用上下文(装饰器模式)封装他们的通用处理:在execute执行方法中,添加通用操作:
public class VIPContext {
private VIPStrategy vipStrategy;
public VIPContext(VIPStrategy vipStrategy) {
this.vipStrategy = vipStrategy;
}
public void executeStrategy(){
System.out.println("VIP通用处理");
vipStrategy.handle();
}
}
编写完成,简单测试一下:
public class Good {
void good(String arg){
VIPStrategy vip1 = VIPStrategyFactory.getVipStrategy("vip1");
VIPContext vipContext = new VIPContext(vip1);
vipContext.executeStrategy();
}
public static void main(String[] args) {
Good good = new Good();
good.good("vip1");
}
}
3、总结
使用策略模式代替if else确实能让代码的逻辑更加清晰,但是仅限于大量的if else,使用策略模式可以观察到,代码量会急剧膨胀
我的建议:
1-3个分支:if else
3-5个分支:switch
更多:使用策略模式
不过还是看个人的喜好,按你的选择即可
标签:策略,VIPStrategy,void,arg,模式,else,vipStrategy,public From: https://www.cnblogs.com/zko0/p/17195834.html