0

我目前正在阅读一本关于设计模式的书,在书中他使用了一个这样的例子:

<?php
//Client.php
/*Age groups:
18-29: Group 1
30-39: Group 2
40-49: Group 3
50+ : Group 4
*/
function __autoload($class_name)
{
    include $class_name . '.php';
}

class Client
{
    //$hotDate is component instance
    private $hotDate;

    public function __construct()
    {
        $this->hotDate=new Female();
        $this->hotDate->setAge("Age Group 4");
        echo $this->hotDate->getAge();
        $this->hotDate=$this->wrapComponent($this->hotDate);
        echo $this->hotDate->getFeature();
    }

    private function wrapComponent(IComponent $component)
    {
        $component=new ProgramLang($component);
        $component->setFeature("php");
        $component=new Hardware($component);
        $component->setFeature("lin");
        $component=new Food($component);
        $component->setFeature("veg");
        return $component;
    }
}

$worker=new Client();
?>

我的问题是 wrapComponent 函数。如何在不丢失以前内容的情况下多次初始化类变量?在我看来,唯一会返回的是 Food 类的组件,因为它是最后一个被初始化的。抱歉,如果这是一个明显的问题,但我在网上找不到任何东西,而且我以前从未见过这样做过。

4

2 回答 2

0

要记住的是对象是通过引用传递的,因此当您将值重新分配给引用时,它只会破坏该对象,即没有其他对它的引用。

在每种情况下,新操作在分配之前解决,因此在整个链中维护对组件的引用,该引用存在于每个新创建的对象中。

于 2013-05-28T05:50:46.793 回答
0

这可能是装饰器模式的一个实现。在这里
找到另一个可以帮助您理解此模式的示例。

于 2013-05-28T07:40:13.950 回答