我有容器,其中包含其他容器,可以包含其他容器等。对象container1
有特殊方法foo()
,我想从container3
调用此方法。我怎么能这样做?
我想过 Singleton 设计模式,但在我的程序中存在多个类MyClass1
的对象。我想过委托设计模式,但container2
不必对MyClass1
一无所知(没有必要这样做)。
container1:MyClass1
|
+--container2:MyClass2
| |
| +---container3:MyClass3
| |
| +---container3:MyClass3
|
+---container4:MyClass4
答案 0 :(得分:0)
您可以使用某种依赖注入模式。
一个小例子:
interface FooContainer
{
function foo();
}
Class Injector
{
private diContainer;
static function getInstance()
{
<singleton>
}
function addDependency(FooContainer $class, $key)
{
$this->diContainer[$key] = $class;
}
function getDependency($key)
{
return $this->diContainer[$key];
}
}
Class Container1 implements FooContainer
{
function foo()
{
echo "Foo"
}
}
Class Container3
{
private fooClass;
function setFoo()
{
$this->fooClass = Injector::getInstance()->getDependency("foo");
return $this;
}
function foo()
{
$this->fooClass->foo();
}
}
你这样称呼它。
$container1 = new Container1();
/** do whatever you need */
Injector::getInstance()->addDependency($container1, "foo");
$container3 = new Container3();
$container3->setFoo()->foo();