在PHP

时间:2016-07-06 16:03:29

标签: php design-patterns factory implementation

我有一个关于在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对象。

0 个答案:

没有答案