- 问题场景
根据条件不同有多种算法,需用许多if-else包括所有情况导致代码臃长 - 解决思路
保留不变的(接收客户参数,调用算法),封装变化的(算法的实现)。 - 具体实现
1.传统面向对象(略);
2.js实现
var Context = function(strategy){
Strategy[strategy](arguments);
}
var Strategy = {
's0': function(){};
's1': function(){};
}
- 优缺点
利用组合委托、多态,避免if-else;
把strategy抽出来,易于复用、扩展、切换;
context拥有执行算法能力,算是继承的一种更轻便的替代方案。