策略模式 - 969251639/study GitHub Wiki
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
项目场景:产品定义了不同商品有不同的销售规则,那么不同商品直接可以使用策略模式动态创建不同的销售策略
- 定义规则,即产品的销售策略
public interface Rule {
//规则验证
public RuleInvalidResult valid(RuleParam ruleParam);
}
- 实现不同商品不同规则
//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商品规则
...
}
}
...
- 根据不同商品使用不同规则
//从数据库中读取该商品
Product p = productService.queryById(id);
//根据数据库中定义的该商品规则找出具体的规则类,这里使用Spring查找
Rule r = SpringContainerTools.getBean(p.getRule());
//验证
r.valid(ruleParam);