2012-02-04 84 views
2

可能重複:
What are the practical uses of Factory Method Pattern?
Differences between Abstract Factory Pattern and Factory Method工廠模式的優勢是什麼?

我目前工廠的理解是,它可以通過輸入字符串創建對象,說

Factory.create("mouse"); 
Factory.create("hamster"); 

有什麼優勢這種模式超過新的?

+0

你怎麼用'new'做這個? – 2012-02-04 13:22:37

+0

另一種可能的dup:http://stackoverflow.com/questions/751804/what-are-the-practical-uses-of-factory-method-pattern – jgauffin 2012-02-04 13:31:40

回答

0

你可以減少依賴(如果它在你的語言中很重要)。

也就是說,您可以將您的客戶端從沉重的#includes,編譯時間和依賴關係中隔離開來。

0

當您有一組對象並且只應創建來自特定組的對象時,Factory patter纔有用。 Somethign像:

abstract UI factory: 
    create_window() 
    create_button() 
    ... 

Windows UI factory: 
    create_window() 
    create_button() 
    ... 

... 

在這種情況下,而不是噸if結束了你的代碼,你可以一次實例化你的工廠,並使用它。

1

當您需要創建複雜產品時(比如「封裝」複雜的產品創建過程),對多個產品擁有單一控制點或需要管理生命週期和/或資源這些產品從單一參考點消耗。在某些情況下,重寫產品實例並使用「新」來處理代碼太複雜了,所以工廠方法可以確保重用性和一致性,同時最大限度地減少潛在的編碼錯誤。

在可視化編程IDE中可能會說一個例子,您可以在兩個或多個同時打開的項目中使用工具包;工具包及其功能很可能由工廠模式實例化,因爲它的圖形和邏輯非常複雜,並且需要對其一個或多個實例進行仔細管理。

2

如果您想通過共享工廠「協調」創建不同的對象(在您的示例鼠標和倉鼠中),工廠很有用。這可以用來(a)抽象出一個公共超類的每個子類的特定構造器細節(例如在你的例子中的Animal),或者(b)根據哪種類型的對象(或動物)爲構造函數提供默認參數被創建。

它可用於統一創建共享對象的對象,例如,在緩存中:CacheFactory - > Memcache,Filecache,...與每個緩存工作類似,但設置不同的緩存策略可能會有很大的不同。在使用工廠方法時,您可以更輕鬆地在不同的緩存策略之間進行切換,最好只需鏈接一行代碼工廠(「Memcache」,選項),而不必擔心特定後端的複雜性;