java工廠模式分三種:簡單工廠模式、工廠方法模式、抽象工廠模式。
簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
簡單工廠模式就是通過一個"全能類",根據外界傳遞的信息來決定創建哪個具體類的對象。如下圖(懶得寫demo了,知乎上截了一個。):
通過一個簡單工廠類,根據name創建相應的產品對象。
關於簡單類如過還有不明白,更多的資料可以參考http://blog.csdn.net/weiwenlongll/article/details/6918164。
簡單工廠模式嚴重違背了“開閉原則”,難以拓展,由此產生了工廠方法模式。
工廠方法模式(FACTORY METHOD)是對簡單工廠模式進行了抽象化,符合“開閉原則”,實現了可擴展。
工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
工廠方法模式使用場景:
如組裝手機的代工廠。從手機原料工廠獲取外殼、顯示屏、主板、按鍵、電池等配件進行組裝。組裝手機工廠只負責手機的裝配,而不負責配件的生產,也不需要關心從手機原料工廠出來的配件是否改變,只要手機各個配置銜接的接口不變就行。比如原料工廠顯示屏從TFT 的換成了UFB的顯示屏,對於組裝手機的代工廠來說,只要接口沒變,只需要繼續裝配就行。
如下圖,首先建立一個原料工廠接口,原料工廠接口分別定義了創建外殼、顯示屏、主板、電池的方法。
LB手機原料工廠負責提供LB手機需要的配件,電池、TFT顯示屏、主板、皮革外殼。
下面是手機裝配廠的接口,裝配廠只負責從原料工廠獲取配件並裝配成新的手機,其他的概不負責。
LB手機裝配廠,負責裝配LB原料工廠提供的配件。當然,偶爾也接接私活,裝配其它手機廠的手機。
LB手機銷量很火,在全國各地都有了裝配廠。有一天LB手機的屏幕突然要進行更換了,從TFT顯示屏變更成UFT顯示屏。牽一發而動全身,這時候就體現出了工廠方法模式的好處。無論LB手機的配置如何變更,對於裝配廠來說,createDisplay()接口依然不變。這樣只需要原材料工廠的顯示屏從提供TFT顯示屏更換為UFT顯示屏就行。
工廠模式的好處就在於提供創建的產品接口給使用者就行,無論產品的類型如何變化,只要根據接口創建的產品的功能沒有變化,使用者就無須做任何變動。
很多介紹工廠方法模式的都是將工廠模式的用法列出來,而並沒有具體介紹何時使用。初看時覺得工廠方法模式屬於多余,增加了繁雜性,后來慢慢熟悉了工廠方法模式的用處,又重新翻閱了一遍《Head First Design Patterns》鞏固一下。特模擬一個場景結合理論記錄下來,希望能鞏固理解。