最近和后端同学交流米奇妙妙代码,发现了一种很邪魅(我个人觉得)的策略模式代码,来给大伙评评。
策略模式我们都知道简单来说就是将策略罗列为字典,然后将状态作为 key 值传入字典执行对应的函数体,或者用 switch case 的方式去实现策略模式。
但我看到的是这样的代码
async function run(query) {
await planA(query);
await planB(query);
await planC(query);
await planD(query);
await planE(query);
}
async function planA(query) {
if (query.type !== 'A') return
... planA 代码执行体
}
async function planB (query) {
if (query.type !== 'B') return
... planB 代码执行体
}
PlanCDE 如法炮制
对没错,这哥们将本来前置的判断后置放进了函数体里,变成了反向的取反型策略模式,换来的是简洁的函数主体。瞬间让我的大脑拧成麻花,居然,还可以这么写啊。