пример:
class SomeFactory {
public function getObject(int $type)
{
if ($type === 1) {
return new Object1();
}
if ($type === 2) {
return new Object2();
}
}
}
но хочется делать "по правильному" c di и контейнерами. Тогда делаешь так:
class SomeFactory {
public function __construct(Object1 $object, Object2 $object2)
...
public function getObject(int $type)
{
if ($type === 1) {
return $this->object1;
}
if ($type === 2) {
return $this->object2;
}
}
}
но тут очевидный недостаток, что всегда инстанциируются все зависимости, хотя получать мы будем только один инстанс. У зависимостей могут быть свои зависимости, они могут быть тажеловесный и все такое.
Можно прокидывать контейнер как зависимость и все тянуть оттуда, но это бэд практис.
Что посоветуете? Как вы делаете фабрики?
Это уже не фабрика, а service locator
Обсуждают сегодня