如何从父容器调用方法

时间:2014-01-17 08:30:18

标签: php design-patterns containers

我有容器,其中包含其他容器,可以包含其他容器等。对象container1有特殊方法foo(),我想从container3调用此方法。我怎么能这样做?

我想过 Singleton 设计模式,但在我的程序中存在多个类MyClass1的对象。我想过委托设计模式,但container2不必对MyClass1一无所知(没有必要这样做)。

container1:MyClass1
|
+--container2:MyClass2
|  |
|  +---container3:MyClass3
|  |
|  +---container3:MyClass3
|
+---container4:MyClass4

1 个答案:

答案 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();