我想知道如果this tutorial在PHP中正確實現工廠設計模式。以下是實際的源代碼。PHP工廠設計模式方法說明
<?php
class Automobile
{
private $vehicle_make;
private $vehicle_model;
public function __construct($make, $model)
{
$this->vehicle_make = $make;
$this->vehicle_model = $model;
}
public function get_make_and_model()
{
return $this->vehicle_make . ' ' . $this->vehicle_model;
}
}
class AutomobileFactory
{
public static function create($make, $model)
{
return new Automobile($make, $model);
}
}
// have the factory create the Automobile object
$veyron = AutomobileFactory::create('Bugatti', 'Veyron');
print_r($veyron->get_make_and_model()); // outputs "Bugatti Veyron"
根據一本書「設計模式」,由四人幫,工廠模式的適用性
- 一個類不能預見的類的對象,必須創建
- 一類希望其子類指定它創建的對象
- 類將責任委託給幾個輔助子類之一,並且您想本地化哪些輔助子類是委託的知識
第一點,這個例子實際上知道要創建什麼類的對象,即Automobile
,不是嗎?
第二點,沒有子類。 Automobile
類不會從AutomobileFactory
繼承。我認爲AutomobileFactory應該至少有一個由Automobile實現的功能,它處理對象創建。
有人可以澄清這一點嗎?我剛開始學習設計模式,每次遇到與別人不同的教程時,都會讓我困惑不已。
這幾乎是相同的例子:) – 2013-05-13 14:33:49
我不同意 - 除了他們都生產汽車的事實。我們來看看你的清單,然後看Wiki的例子。 1.一個類無法預測它必須創建的對象類 - 對於CarFactory來說是真的 - 不知道它會產生什麼。 2.一個類想要它的子類指定它創建的對象 - 真,檢查出SedanFactory – 2013-05-13 14:37:34
但它知道它是'Sedan'。還有另一個例子(封裝),這確實是不同的 – 2013-05-13 14:40:36