2010-01-29 121 views
1

在工廠方法GoF的設計模式中,我可以看到FactoryMethod()方法沒有接受任何參數。我的理解是,FactoryMethod應該被傳遞一個參數,該參數將在switch case中使用,然後根據switch case中的值,不同的類對象被實例化並返回給調用者。我的問題總結如下:爲什麼工廠方法在GoF工廠方法中沒有參數

1)我應該實現工廠方法模式,完全採用GoF定義的相同方式。我也參考了www.dofactory.com上爲工廠方法模式提供的UML圖)。

2)爲什麼GoF的工廠方法模式沒有顯示接受參數?

回答

1

1)I應該實現工廠方法 圖案,恰好以相同的方式通過 GoF的定義。我也參考 工廠方法模式www.dofactory.com 提供的UML圖)。

做任何有意義的事情。模式只是指導,而不是自然的分類法則。

更重要的是,GoF中的模式並不全面。你會發現自己發現並實現了從未出現在書中的模式,甚至沒有名字。這是一個好東西

2)爲什麼GoF的工廠方法模式 未顯示接受參數?

工廠方法模式只是一個派生類的特殊實例。特別是,你有一個抽象類和一個抽象方法,以及任何數量的實現該方法的派生類。通常,這個實現的方法返回一些其他類型的對象 - 這就是它的一種創建模式。

因此,使用DoFactory.com上的樣本,類將返回一組固定的對象。原則上什麼都不能阻止用戶將某些參數傳遞給工廠方法。

我的理解是, FactoryMethod應傳遞將在 開關的情況下使用,然後根據在開關的情況下 值 參數,不同 類對象實例化和 返回給來電者。

如果這對您有意義,您當然可以實現它。

0

2)爲什麼GoF的工廠方法模式 未顯示接受參數?

在面向對象編程中,你的方法應該做一個明確定義的事情。傳遞某種價值來接通被稱爲「交替凝聚力」:相反,該方法應該分爲多種方法,每種方法一種。例如:

createVeggie(veggieType) 

將被分成

createBroccoli() 
createCelery() 
createCollaredGreens() 

這使得你的類接口更清潔,更容易提升改造,提高了編譯時檢查。

另外,要小心你沒有違反Factory Method的意圖:它實際上是避免讓調用代碼知道哪個對象被創建。正如朱麗葉所說,你可以實現這樣的事情,但不再是GoF工廠方法,並沒有相同的優勢。