【问题标题】:How to determine which object to create in a factory pattern如何确定在工厂模式中创建哪个对象
【发布时间】:2017-10-23 17:12:39
【问题描述】:

我正在使用 Angular 2 从头开始​​创建自动完成功能。我需要监听不同的击键并根据按下的击键执行不同的操作。我必须听四种类型的击键:回车键、向下键、向上键和会触发新的自动完成查询的键(例如:退格键、字母数字键、删除键、输入文本框中字符串的值)。

我的项目负责人希望我实现一种用于创建击键处理程序的设计模式,并推荐了工厂模式(很可能作为设计模式的实践)。因此,理论工厂将为我的四种击键类型中的每一种创建不同的对象。侦听器返回一个字符串,我可以使用它来确定按下了哪个键(例如“ArrowUp”、“ArrowDown”、“Enter”)。因此输入处理程序将选择突出显示的选项并将其填充到文本框中。向下处理程序将取消选择当前选项并选择它下面的选项。

工厂确定要创建哪个对象的最佳方法是什么。例如,我可以这样做:

createHandler(keystroke) {
  //or alternatively use a case statement
  if(keystroke === "Enter") {
    return new EnterHandler();
  } else if(keystroke === "ArrowDown") {
    return new ArrowDownHandler();
  } else if(...)
}

但是在阅读了这个模式之后,这是一个“幼稚”的实现。对于我的特殊情况,根据传入的字符串了解要创建哪个对象的最佳方法是什么?或者我正在寻找的功能是否有另一种更好的模式?

【问题讨论】:

    标签: oop design-patterns factory factory-pattern


    【解决方案1】:

    您提出的实施方案可以正常工作。它干净简单。

    您可以通过以下几种方式来增强它:

    1. 使用 { String, Handler } 的字典
    2. 从 Composition Root 注入各种命令,而不是让它们存在于工厂方法中
    3. 提供具有自己名称的命令对象,然后执行具有相应名称的命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多