策略模式 - 969251639/study GitHub Wiki

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

项目场景:产品定义了不同商品有不同的销售规则,那么不同商品直接可以使用策略模式动态创建不同的销售策略

  1. 定义规则,即产品的销售策略
public interface Rule {
        //规则验证
	public RuleInvalidResult valid(RuleParam ruleParam);
}
  1. 实现不同商品不同规则
//A商品规则
@Service("AProductRule")
public class AProductRule implements Rule {
        @Override
	public RuleInvalidResult valid(RuleParam ruleParam) {
            //A商品规则
            ...
        }
}

//B商品规则
@Service("BProductRule")
public class BProductRule implements Rule {
        @Override
	public RuleInvalidResult valid(RuleParam ruleParam) {
            //B商品规则
            ...
        }
}

...
  1. 根据不同商品使用不同规则
//从数据库中读取该商品
Product p = productService.queryById(id);
//根据数据库中定义的该商品规则找出具体的规则类,这里使用Spring查找  
Rule r = SpringContainerTools.getBean(p.getRule());
//验证
r.valid(ruleParam);