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

时间:2015-01-14 08:43:31

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

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

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

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

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

你有什么建议?

谢谢,

1 个答案:

答案 0 :(得分:0)

您的班级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());