我用PHP编写代码并有两个类:Producer和Member。 Producer是静态类,用于生成和缓存成员实例。成员可以使用另一个成员实例,但为了获得它,需要调用Producer来获取它。
class Producer
{
static private $members = array();
static function getMember($name)
{
if (!isset(self::$members[$name]))
{
self::$members[$name] = new Member($name);
}
return self::$members[$name];
}
static function getFriend($myname, $friendname)
{
// Disregard $myname at the moment as irrelevant
return self::$members[$friendname];
}
}
class Member
{
private $myname;
public function __construct($name)
{
$this->myname = $name;
}
public function getFriend($name)
{
return Producer::getFriend($this->myname, $name);
}
public function work()
{
$friend = $this->getFriend($name);
$friend->doSomething();
}
}
显然这是循环依赖,需要消除。在这种情况下使用依赖注入会很好,只是在实例化时将Producer的实例传递给Member,但Producer是静态类。
处理此类问题的最佳方法是什么?介绍单例MembersCache并将其传递给每个成员?对我来说似乎很笨拙