【问题标题】:Is there a standard name for the following code pattern?以下代码模式是否有标准名称?
【发布时间】:2017-08-31 03:26:38
【问题描述】:

当我在几个条件之间有一个已知的执行路径时,我发现我使用以下模式。我将在 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 类型的语言)

【问题讨论】:

标签: javascript oop design-patterns


【解决方案1】:

在 OOP 中,这称为strategy pattern。给定查找表,它也类似于interpreter pattern,但是在您的情况下是一种非常简单的语言。使用引起副作用的策略也可能被称为command pattern,但我认为在您的示例中并非如此。

在 FP 中,这种模式没有特定的名称,它只是你做事的方式 - 尽管查找方法可能被称为高阶函数,因为它返回另一个函数。

顺便说一句,predicate 这个术语通常只是一个返回布尔值的函数,虽然这适合你的情况,但它与抽象模式没有任何关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2010-11-02
    相关资源
    最近更新 更多