你實際上在你的例子中使用了一個簡單的工廠,它對我來說看起來很好。有了這些要求,就不需要去工廠方法模式。
但是我會嘗試在這種情況下解釋工廠方法。顧名思義:
工廠方法模式定義了一個創建對象的接口,但讓子類決定實例化哪個類。工廠方法允許類將實例化延遲到 子類。
所以基本上你會有一個抽象工廠類,它定義了哪些創建方法在混凝土工廠中可用,後者將決定創建哪些具體對象。
我可以在你的scenerio中想到一個例子。可以說你有不同品牌的Drivables(比如寶馬和本田)。所以你會有類似BMWCoupeDrivable, BMWMotorcycleDrivable, BMWSedanDrivable, HondaCoupeDrivable, HondaMotorcycleDrivable, HondaSedanDrivable
的課程。將來你可能還會添加更多的品牌。在這種情況下,您可能使用工廠方法更好地使用 。
abstract class DriveableFactory
{
abstract public function create($numberOfPeople);
//-- Other methods here which manipulate the drivable
//-- e.g. testDrive()
}
class BMWDriveableFactory extends DriveableFactory
{
public function create($numberOfPeople){
if($numberOfPeople == 1)
{
return new BMWMotorcycleDriveable;
}
elseif($numberOfPeople == 2)
{
return new BMWCoupleDriveable;
}
elseif($numberOfPeople >= 3 && $numberOfPeople < 4)
{
return BMWSedanDriveable;
}
}
}
class HondaDriveableFactory extends DriveableFactory
{
public function create($numberOfPeople){
if($numberOfPeople == 1)
{
return new HondaMotorcycleDriveable;
}
elseif($numberOfPeople == 2)
{
return new HondaCoupleDriveable;
}
elseif($numberOfPeople >= 3 && $numberOfPeople < 4)
{
return HondaSedanDriveable;
}
}
}
爲了更好的解釋,我建議您閱讀Head First Design Pattern。