行为模式之策略模式
作者:
后来丶_a24d | 来源:发表于
2019-09-18 21:02 被阅读0次
总纲
- 设计原则:遵循单一职责、依赖倒置、迪米特、开闭原则
- 常用场景:算法或者策略需要经常替换
- 使用概率:60%
- 复杂度:中
- 变化点:策略的种类
- 选择关键点:客户端是否依赖于某一个或若干个具体的策略
- 逆鳞:无
策略模式
- 根据不同策略创建不同对象,各个对象只是算法不同而已
- 实践
- DefaultSqlSession相当于Context 策略体现在配置中可以设置SimpleExecutor还是别的Executor作为实现类。参考mybatis接口层源码分析-SqlSession
- 举例
/**
* 策略模式能避免出现大量的 if...else
* 在需要从三个数据库读取三种不同处罚记录的时候选择了策略模式,保持controller层代码纯净
* 拓展时只需要加类方便
*/
public interface NumStrategies {
void doSomething();
}
public class FirstStrategies implements NumStrategies {
@Override
public void doSomething() {
System.out.println(" I am firstStrategy");
}
}
public class SecondStrategy implements NumStrategies {
@Override
public void doSomething() {
System.out.println(" I am secondStrategy");
}
}
public class Context {
private NumStrategies numStrategies;
Context(NumStrategies numStrategies){
this.numStrategies = numStrategies;
}
public static Context builderStrategies(Integer strategyNum){
if(strategyNum == 1){
return new Context(new FirstStrategies());
}
if(strategyNum == 2){
return new Context(new SecondStrategy());
}
return new Context(new FirstStrategies());
}
public void doSomething(){
numStrategies.doSomething();
}
}
本文标题:行为模式之策略模式
本文链接:https://www.haomeiwen.com/subject/rlzkuctx.html
网友评论