2012-02-19 69 views
2

比方說,我有3個PHP類:ShedBuilder,HouseBuilder和TableBuilder和下面的代碼:PHP - 如何跨多個子類共享設置並實例化這些共享設置一次?

$worker_1 = new ShedBuilder(); // I only know how to build a shed 
$worker_2 = new HouseBuilder(); // I only know how to build a house 
$worker_3 = new TableBuilder(); // I only know how to build a table 

$worker_1->build(); 
$worker_2->build(); 
$worker_3->build(); 

我想worker_1,worker_2和worker_3類每個共享相同的工具包的工作,例如,我希望所有3名工人使用可用的工具,例如錘子,螺絲刀,釘子等。但worker_1將建立棚屋,worker_2將建造房屋,worker_3建立桌子。

設置工具集一次,然後讓3名工人都知道如何訪問他們工作所需工具的最佳方式是什麼?

我想到了已經貨場/表/房地產建築商從每一個父類,生成器擴展,但是這意味着,當我每個實例我必須給他們每個工具集:

$toolset = new Toolset(); 
$toolset->addTool('hammer'); 
$toolset->addTool('screwdriver'); 
$toolset->addTool('nails'); 

$worker_1 = new ShedBuilder($toolset); 
$worker_2 = new HouseBuilder($toolset); 
$worker_3 = new TableBuilder($toolset); 

我會而是一次實例化這些工具,然後讓所有3個工人/班級分別瞭解該工具集並構建其各個項目。

什麼是最好的方式來實現我想在PHP中做什麼?

+2

是的,注入工具集作爲依賴關係幾乎是你要找的。你在執行這個過程中遇到了一個具體問題嗎? – deceze 2012-02-19 00:57:22

+0

實現起來並不是問題,出於某種原因,它似乎不是「最佳」或「最優化」的構建方式,但您的評論是很好的保證,我將繼續執行此實現。 – ews2001 2012-02-19 01:06:47

回答

4

你有什麼已經,實例化一個Toolset和它們的構造提供$toolset到每個工人類,被稱爲Dependency Injection,,它實際上是處理這個任務大部分時間的首選方式。

可以通過創建一個單例對象來實現它,但是當依賴注入以一種整潔且易於測試的方式處理它時,這是不必要的。

+0

優秀的描述和維基百科鏈接,幫助。 – ews2001 2012-02-19 01:07:54

0

我想爲這3個構建器類使用父類,並在使用工具集的靜態變量的父類中執行。使用靜態變量的Check this page