javascript - 以下代码模式是否有标准名称?

标签 javascript oop design-patterns

我发现当我在几个条件之间有一个已知的执行路径时,我会使用以下模式。我将在 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,因为这是我通常的工作方式。但我确信我在其他语言(甚至是 OOP 类型的语言,如 Java)中看到过这种模式

最佳答案

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

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

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

关于javascript - 以下代码模式是否有标准名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972730/

相关文章:

java - 封装的目的是什么?它提供安全层吗?

django - NextJS 使用 Django API - 如何选择最佳模式

c# - 具有依赖注入(inject)设计的处理程序工厂

javascript - 如何在 html 更改后调用 jquery 函数

javascript - 如何左/右对齐 flexbox div 中的两个跨度

javascript - 选中复选框后出现输入字段。 HTML

JavaScript 运算符优先级逻辑让我感到困惑

PHP OOP 构造函数 : SELECT * vs smaller SELECT queries in getters

c++ - 派生重载运算符,但仅对相同类型进行运算

design-patterns - 决定开发生命周期