Зачем использовать & quot; getObject & quot; метод при написании класса Фабрика?

Типично Factory класс содержит метод как getObject,

Тем самым

class Factory
{
private $type;

function __construct($type)
{
$this->type = $type;
}

function getObject()
{
//example for brevity only to show use of $type variable
if ($this->type) $object = new $type();
return $object;
}
}

Вопрос: Почему бы не вернуть объект напрямую через конструктор?

class Factory
{
function __construct($type)
{
if ($type) $object = new $type();
return $object;
}

}

1

Решение

Потому что вы не можете вернуть ничего, кроме своего собственного экземпляра из конструктора. Весь смысл конструктора в том, чтобы настроить экземпляр. Весь смысл фабрики состоит в том, чтобы абстрагироваться от какой-то сложной логики построения / настройки от пользователя.

Фабричный класс обычно имеет статический метод, такой как:

class Foo {
public function __construct($x, $y) {
// do something
}

// this is a factory method
public static function createFromPoint(Point $point) {
return new self($point->x, $point->y);
}
}

$foo = Foo::createFromPoint(new Point(1, 1)); // makes no sense but shows the concept
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]