当我在几个条件之间有一个已知的执行路径时,我发现我使用以下模式。我将在Map中定义我的测试用例(在这个例子中是一个POJO)并使用条件来进行密钥查找。我通常使用术语predicate
。
此模式是否有标准名称?如果是,那么它的使用历史或上下文是什么?
var predicates = {
negateRegexp: function (value, operator) {
return !operator.regex.test(value);
},
negateOperand: function (value, operator) {
return value !== operator.operand;
},
affirmRegexp: function (value, operator) {
return operator.regex.test(value);
},
affirmOperand: function (value, operator) {
return value === operator.operand;
}
};
var predicateKey = (operator.prefix === '!' ? 'negate' : 'affirm') +
(operator.regexp ? 'Regexp' : 'Operand');
var testResult = predicates[predicateKey](value, operator);
if (testResult) {
doSomethingWith(value);
}
我使用JavaScript作为示例,因为这是我通常使用的。但我确信我已经在其他语言中看到过这种模式(甚至是像Java这样的OOP类型)
答案 0 :(得分:3)
在OOP中,这被称为strategy pattern。给定查找表,它也类似于interpreter pattern,但对于您的情况下的非常简单的语言。使用引起副作用的策略也可称为command pattern,但我认为在您的示例中并非如此。
在FP中,这种模式没有特定的名称,它只是你做事的方式 - 尽管查找方法可能被称为高阶函数,因为它返回另一个函数。
顺便说一句,术语predicate通常只是一个返回布尔值的函数,而这适合你的情况,它与抽象模式没有任何关系。