2013-05-28 30 views
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功能。如何在不丟失以前的內容的情況下多次初始化類變量?在我看來,這將返回唯一的事情是與食品類成分,因爲它是最後一個被初始化。對不起,如果這是明顯的問題,但我無法在網上找到任何東西,我從來沒有見過這樣做過。

+0

方法'ProgramLang','Hardware'和'Food'可能與以前的數據+新數據中返回一個對象。所以結果可以是累積的。 – kevinamadeus

回答

0

要記住的是對象是通過引用傳遞,因此,當您重新分配值參考它只能破壞對象的事情是有它沒有其他的引用。

新操作解決了每種情況下的分配,以便參考被保持在整個鏈中的部件,在每個新創建的對象的存在,所述參考之前。

0

這可能是修飾模式的實現。
查找here的其他爲例,可以幫助你瞭解這種模式。