【问题标题】:Factory pattern for multiple nested dependencies?多个嵌套依赖项的工厂模式?
【发布时间】:2019-01-29 17:27:07
【问题描述】:

我了解简单表单上的工厂模式,但如果类需要多个嵌套依赖项,则了解不多。例如,

$cfg = new Cfg();
$cfg->setA('a');
$cfg->setB('b');

$qux = new Qux('x');    
$bar = new Bar($cfg, $qux);    
$foo = new Foo($cfg, $bar);

在上面的示例中,如何正确地为类 Foo 创建工厂模式,以便在运行 $factory->build(); 时获得 Foo 及其所有依赖项的实例?

【问题讨论】:

    标签: php design-patterns factory factory-pattern


    【解决方案1】:

    你必须反其道而行之。当客户端代码在工厂对象上调用.build 时,一切都应该准备好了,因此.build 很少使用任何参数,如果是这样,它们通常用作辅助工具:日志记录、某种调试时帮助程序,无论如何.这并不意味着您必须保持 .build 无参数。

    所以问题是如何获得无参数的.build,对吗?好吧,AbstractFactory 模式 - 工厂工厂,或者“更高阶工厂”,如果它对你更有意义的话。它可能需要实现。通常,对于大型且相当复杂的项目,它需要某种 ServiceLocator - 基本上是一个 DI 容器。它可能是全局的并且“知道”所有现有服务(不过,我不会推荐它),或者它可能更精确(如模块范围或命名空间范围 - 取决于具体情况)。其他选项是普通的旧式柯里化——一个来自函数式编程的概念,可以相对容易地采用(当然,一旦你得到它)到你的代码中;本质上,它做了AbstractFactory 会做的事情,绕过冗长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多