如何确定在工厂模式中创建的对象

时间:2017-10-23 17:12:40

标签: oop design-patterns factory factory-pattern

我正在使用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(...)
}

但在阅读了这个模式后,这是一个“天真”的实现。根据传入的字符串知道要创建哪个对象的最佳方法是什么?或者,我正在寻找的功能还有另一种更好的模式吗?

1 个答案:

答案 0 :(得分:0)

您提议的实施方案可行。它干净简单。

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

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