$product instanceof ConcreateProduct1
не доступны. Получается что-то типа фабрика + прокси.interface ComponentInterface
{
public function getName(): string;
}
class NewsComponent implements ComponentInterface
{
public function getName(): string
{
return 'news';
}
}
class ArticleComponent implements ComponentInterface
{
public function getName(): string
{
return 'article';
}
}
interface ComponentFactoryInterface
{
public function create(): ComponentInterface;
}
class NewsComponentFactory implements ComponentFactoryInterface
{
public function create(): ComponentInterface
{
return new NewsComponent();
}
}
class ArticleComponentFactory implements ComponentFactoryInterface
{
public function create(): ComponentInterface
{
return new ArticleComponent();
}
}
class ComponentFactory
{
/**
* @param array<string, ComponentFactoryInterface> $factories
*/
public function __construct(private array $factories)
{
}
public function create(string $name): ComponentInterface
{
return $this->factories[$name]->create();
}
}
$factory = new ComponentFactory([
'news' => new NewsComponentFactory(),
'article' => new ArticleComponentFactory(),
]);
var_dump($factory->create('news')->getName());
С помощью DI переменная $factory инициализируется без необходимости прописывать весь граф зависимостей (а он в реальности может быть очень большим). Не понимаю в чем его вредность.
Как раз наоборот. Без них никуда. Как с вашим подходом их пробрасывать в продукты?
Ну и вы так и не ответили на вопрос. В чем плюсы совмещения фабрики и прокси?