策略模式
策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
该模式主要解决在有多种算法相似的情况下,使用 if... else ... 所带来的复杂和难以维护。它的优点是算法可以自由切换,同时可以避免多重 if... else 判断,且具有良好的扩展性。
类似于我们在路由的匹配使用策略模式。前端应用在转换后端数据为更优雅的页面展示信息。
js
const strategy = {
"S": function (salary) {
return salary * 4;
},
"A": function (salary) {
return salary * 3;
},
"B": function (salary) {
return salary * 2;
}
}
function claBonus(level, salary) {
return strategy[level](salary);
}
console.log(claBonus("S", 100))
console.log(claBonus("A", 100))
代理模式
es6 中的 proxy 就是代理模式的一个非常好的体现。
js
class Star {
play() {
console.log('唱歌');
}
}
class StarProxy {
constructor() {
this.star = new Star();
}
talk(price) {
if (price > 10000) {
this.star.play();
} else {
console.log('价格太低');
}
}
}
const jr = new StarProxy();
jr.talk(10001); // 唱歌