php - 工厂对象创建需要其他对象的对象

标签 php design-patterns dependency-injection factory-pattern solid-principles

我需要一个工厂对象能够创建多个对象,但在其中注入(inject)其他对象。 例如:

class MyFactory
{
  public function createObjectA() {
    return new ObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
  }

  public function createObjectB() {
    return new ObjectB(new ObjectBNeededObject1(), new ObjectBNeededObject1());
  }
}

我的工厂是否也应该实例化所需的对象(考虑到我的工厂被允许创建任何对象)? 我应该通过注入(inject)到我的工厂构造函数中来传递它们吗(但是构造函数将包含很多很多参数)? 我是否应该将它们作为参数传递到我的工厂方法中(但是工厂客户然后将知道应该如何创建要创建的对象,并且知道它不是它的责任)? 我的工厂是否应该创建对象构建器(能够创建我的对象及其所需的对象)而不是直接创建我的对象?

你有什么建议?

谢谢,

最佳答案

你的类 Factory 不应该知道如何从类 ObjectBNeededObject1 中实例化一个对象,因为如果构造函数发生变化,你将不得不返回类 >Factory 并做必要的工作以避免回归

已更新

class MyFactory
{
  public static function createObjectA($object1, $object2) {
    return new ObjectA($object1, $object2);
  }

  public static function createObjectB($object1, $object2) {
    return new ObjectB($object1, $object2);
  }
}

$objectA = MyFactory->createObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
$objectB = MyFactory->createObjectB(new ObjectANeededObject1(), new ObjectANeededObject1());

关于php - 工厂对象创建需要其他对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938795/

相关文章:

php - Lumen/Laravel 错误 - ReflectionException : Class App\Http\Controllers\Photos\TestController does not exist

php - 使用 PHP 调用 URL 并获取 XML 响应

php - 基于网络的项目管理和计时软件?

java - API 设计中的响应/回复模式与方法重载

python - 如何在运行时配置 Clojure 库?

php - WordPress中SQL查询中的对角无序

c# - 适用于预先存在的类层次结构的函数的最佳模式

c# - 子类中的父元素

scala - Jonas Bonér 的依赖注入(inject)策略似乎是有限的——但也许我不明白

c# - 如果一个对象没有静态字段,我是否需要担心它是线程安全的?