【问题标题】:Factory pattern - how to avoid switch construction?工厂模式——如何避免开关构造?
【发布时间】:2017-09-25 16:11:32
【问题描述】:

我用的是简单的Factory pattern,请看屏幕:

如您所见,我使用 switch 运算符来选择对象并创建实例。

但是如果有超过 100 个类呢?问题来了。 如何避免开关施工?使用接口?

【问题讨论】:

  • return new $type(new Position()); 应该可以工作,(但我不确定你是否想这样做。)
  • 你的意思是使用变量作为类名吗?
  • 可能是另外使用另一种模式或抽象工厂?
  • 我的意思是,可以这样做。我不知道这对你的模式是否是个好主意。
  • 你的图片上没有开关)

标签: php oop design-patterns


【解决方案1】:

您可以避免switchif 语句,方法是使用带有类名的变量和new 关键字,您唯一需要关心的是namespace!您的代码必须如下所示:

$className = "YourNamespace\\SomeFactory\\SomeImplementation\\" . $type;
return new $className(new Position());

另外,你可以检查类是否存在:

if (class_exists($className) === false) {
    throw new Exception("Class $className not found.");
}

只有在那之后才能创建新实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2021-06-02
    相关资源
    最近更新 更多