1. 程式人生 > >EffectiveJava讀書筆記——考慮用靜態工廠方法代替構造器(一)

EffectiveJava讀書筆記——考慮用靜態工廠方法代替構造器(一)

無法 父類 應該 樹結構 對象 如何 log 筆記 工廠類

參考網址:http://blog.csdn.net/mingyunduoshou/article/details/6149758

http:[email protected]/blog/static/10182372420133220511247/

靜態工廠方法講解

簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

簡單工廠模式的角色分布以及各角色的職責:

工廠角色(Creator):這是簡單工廠模式的核心,由它負責創建所有的類的內部邏輯。當然工廠類必須能夠被外界調用,創建所需要的產品對象。(這個其實就是一個普通類,裏面提供一個創建其他類的方法

抽象(Product)產品角色:簡單工廠模式所創建的所有對象的父類,註意,這裏的父類可以是接口也可以是抽象類,它負責描述所有實例所共有的公共接口。(說一大堆,其實就是具體產品的父類

具體產品(Concrete Product)角色:簡單工廠所創建的具體實例對象,這些具體的產品往往都擁有共同的父類。(其實就是子類

簡單工廠模式的優缺點分析:

優點:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需了解這些對象是如何創建以及如何組織的。有利於整個軟件體系結構的優化。

缺點:由於工廠類集中了所有實例的創建邏輯,這就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連;而且由於簡單工廠模式的產品室基於一個共同的抽象類或者接口,這樣一來,一旦產品的種類增加的時候,即有不同的產品接口或者抽象類的時候,工廠類就需要判斷何時創建何種種類的產品,這就和創建何種種類產品的產品相互混淆在了一起,違背了單一職責,導致系統喪失靈活性和可維護性。而且更重要的是,簡單工廠模式違背了“開放封閉原則”,就是違背了“系統對擴展開放,對修改關閉”的原則,因為當我新增加一個產品的時候必須修改工廠類,相應的工廠類就需要重新編譯一遍。

總結一下:簡單工廠模式分離產品的創建者和消費者,有利於軟件系統結構的優化;但是由於一切邏輯都集中在一個工廠類中,導致了沒有很高的內聚性,同時也違背了“開放封閉原則”。另外,簡單工廠模式的方法一般都是靜態的,而靜態工廠方法是無法讓子類繼承的,因此,簡單工廠模式無法形成基於基類的繼承樹結構。

EffectiveJava讀書筆記——考慮用靜態工廠方法代替構造器(一)