设计模式之策略模式

1. 策略模式

策略模式是一种行为型设计模式,主要思想是定义一系列算法策略,把它们单独封装起来,并且使它们可以互相替换。这样客户端可以根据需要选择不同的算法策略,而不需要改变使用算法策略的上下文,实现了业务逻辑与算法实现的解耦。它的关键是定义一个通用策略接口,然后根据需要创建该接口的实现类,完成独立算法策略的实现。
策略模式的优势,提高代码的维护性和扩展性,同时也保证了低耦合和高内聚的设计原则。

  1. 开闭原则,新增策略时无需修改已有的策略代码。
  2. 职责清晰,每个策略实现只关注自身的业务逻辑
  3. 灵活组合,可以搭配工厂模式,装饰器模式等实现策略增强
  4. 测试友好,每个策略可以单独进行单元测试

2. 举例实现

核心组件
Strategy Interface (策略接口):定义通用算法接口
Concrete Strategy (具体策略):实现具体算法的策略类

public interface StrategyInterface {
	String executeStrategy(String strategy);
}
@Serivce
public class FirstStrategy implements StrategyInterface {
	
	@Override
	public String executeStrategy(String strategy){
		return "execute first strategy";
	}
}
@Serivce
public class SecondStrategy implements StrategyInterface {

	@Override
	public String executeStrategy(String strategy){
		return "execute second strategy";
	}
}
public class StrategyDemo{
	public static void main(String[] args) {
	HashMap<String, StrategyInterface> strategyMap = new HashMap<>();
	strategyMap.put("firstStrategy", new FirstStrategy());
	strategyMap.put("secondStrategy", new SecondStrategy());
	//需要执行first strategy
	FirstStrategy firstStrategy = strategyMap.get("firstStrategy");
	firstStrategy.executeStrategy("需要变更为执行参数");
	//需要执行second strategy
	SecondStrategy secondStrategy= strategyMap.get("secondStrategy");
	secondStrategy.executeStrategy("需要变更为执行参数");
	}
}

在Spingboot中,可以在策略实现类增加Service注解,通过Autowired注入,增加选择策略的参数。

public class StrategyService{
	
	@Autowired
	private final Map<String, StrategyInterface> strategyMap = new ConcurrentHashMap<String, StrategyInterface>();

	 public StrategyInterface get(String strategy) {
		StrategyInterface strategy = strategyMap.get(strategy);
		 if (strategy != null) {
            return strategy;
        } else {
            throw new RuntimeException();
        }
	}
}

3. 注意事项

  1. 所有策略是否实现统一接口
  2. 策略实现与业务处理逻辑边界是否清晰,上下文是否妥善处理策略所需参数
  3. 策略管理方式是否合适(新建/复用)
  4. 异常处理机制是否合适
    当然在实际开发过程中可能遇到其他问题,这就需要我们进行完整的测试了。

4. 适用场景

  1. 支付渠道选择
  2. 营销折扣策略(满减、折扣、优惠券)
  3. 数据加密算法切换
  4. 导航路径策略(最快路线、最少收费等)
  5. 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值