2011-11-02 54 views
0

我知道有很多類似的問題,但我不明白大多數這些問題,因爲我不知道我是否知道工廠方法模式是什麼..這是正確的工廠方法模式嗎?

so..after read many網絡,我想出了以下簡單的類。

我做得對嗎?

abstract class Driveable 
{ 
    abstract public function start(); 
    abstract public function stop(); 

} 

class CoupeDriveable extends Driveable 
{ 
    public function start() 
    { 
    } 

    public function stop() 
    { 
    } 
} 

class MotorcycleDriveable extends Driveable 
{ 
    public function start() 
    { 
    } 

    public function stop() 
    { 
    } 
} 

class SedanDriveable extends Driveable 
{ 
    public function start() 
    { 
    } 

    public function stop() 
    { 
    } 
} 

class DriveableFactory 
{ 
    static public function create($numberOfPeople){ 

     if($numberOfPeople == 1) 
     { 
      return new MotorcycleDriveable; 
     }  
     elseif($numberOfPeople == 2) 
     { 
      return new CoupleDriveable; 
     } 
     elseif($numberOfPeople >= 3 && $numberOfPeople < 4) 
     { 
      return SedanDriveable; 
     } 
    } 
} 


class App 
{ 
    static public function getDriveableMachine($numberOfPeople) 
    { 
     return DriveableFactory::create($numberOfPeople); 
    } 
} 


$DriveableMachine = App::getDriveableMachine(2); 
$DriveableMachine->start(); 
+2

應該在http://codereview.stackexchange .com/ – ariefbayu

+0

@silent //啊...謝謝!!不知道stackexchange有codereview網站。 – Moon

+0

沒問題,只是幫助推廣其他堆棧交換 – ariefbayu

回答

2

是的。這是factory method模式的正確實施。

編輯 +1對於沉默的評論。確實應該在coderewiew上,沒有想到這一點。

+0

mAu // ahhhh太棒了......終於明白了! – Moon

3

要確切:這是一個工廠模式,而不是一個工廠方法圖案

不同之處在於工廠模式中有一個單獨的工廠對象(DriveableFactory),而在工廠方法模式中,create()方法將是基類Driveable的成員。我對PHP不熟悉,並且該模式似乎並不適用於具體的場景,所以我不能在這裏給出一個代碼示例。

但無論如何,你必須區分這兩種模式。我知道他們周圍有很多混亂,維基百科條目工廠方法模式只是錯誤的 - 在網上可以找到很多其他來源。但最好能在這個確切的,因爲它是必不可少的溝通,意味着同樣的事情,當你使用同樣的話......

HTH - 托馬斯

+0

托馬斯韋勒//你能詳細解釋一下嗎?如果維基百科條目不正確,我認爲我不能在其他地方找到更好的答案。 – Moon