我有一个关于在PHP中实现工厂模式的正确方法的问题,用于实例化具有依赖关系的复杂对象。让我们假设工厂类有一个' build'方法,以便例如以下列方式创建类User:
$factory->build('User');
类User需要从存储库(数据库)中检索用户数据,因此它依赖于Repository对象 - 构造函数如下所示:
public function __construct(Repository $repository);
这意味着' build'工厂的方法需要调用这样的东西
$user = new User(new Repository());
现在让我们假设我还需要实例化HomeController对象,该对象在主页上显示内容。它正在检索最新文章的列表 - 在主页上显示它们,因此它也需要存储库对象。所以构建方法会调用类似这样的东西:
$home = new HomeController(new Repository());
现在很清楚我们有两个Repository对象实例,而实际上在这种情况下一个实例就足够了。所以我想知道工厂模式实际注册实例化的Repository对象(将它存储在Factory对象的$ registeredObjects数组中)是否是一个好习惯,如果之前已实例化,则从表中返回它。因此,构建方法中的对象创建看起来就像这样:
$user = new User($this->build('Repository')); // Here Repository is created first time.
$home = new HomeController($this->build('Repository')); //Here it is retrieved from list of already registered objects
在这种情况下,存储库对象实际上是一个单例。我想知道这种方法是否正确,或者更好地实例化两个独立的Repository对象。