本文章根據劉偉(sunny) 的設計模式一書記錄的筆記,感謝作者的知識分享。
工廠模式是最常用的一類建立型設計模式,通常我們所說的工廠模式是指工廠方法模式,它也是使用頻率最高的工廠模式。本章將要學習的簡單工廠模式是工廠方法模式的「小弟」,它不屬於gof 23種設計模式,但在軟體開發中應用也較為頻繁,通常將它作為學習其他工廠模式的入門。此外,工廠方法模式還有一位「大哥」——抽象工廠模式。這三種工廠模式各具特色,難度也逐個加大,在軟體開發中它們都得到了廣泛的應用,成為物件導向軟體中常用的建立物件的工具。
簡單工廠模式:定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(static factory method)模式
,它屬於類建立型模式
。
簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。簡單工廠模式結構比較簡單,其核心是工廠類的設計。
在簡單工廠模式結構圖中包含如下幾個角色:
在簡單工廠模式中,客戶端通過工廠類來建立乙個產品類的例項,而無須直接使用new關鍵字來建立物件,不需要考慮這個產品是如何生成的.客戶端得到產品之後,可以直接使用.
模式結構圖如圖:
不使用設計模式:
產品類十分龐大複雜,需要擴充套件時,就需要重新修改產品類的**,同時裡面包含大量的if-else**.
使用簡單工廠模式重構:
//抽象圖表介面:抽象產品類
inte***ce
chart
//柱狀圖類:具體產品類
class
histogramchart
implements
chart
public
void
display()
}//餅狀圖類:具體產品類
class
piechart
implements
chart
public
void
display()
}//折線圖類:具體產品類
class
linechart
implements
chart
public
void
display()
}//圖表工廠類:工廠類
class
chartfactory
else
if(type.
equalsignorecase
("pie"))
else
if(type.
equalsignorecase
("line"))
return chart;}}
class
client
}
每次需要擴充套件增加新的產品的時候,只需要繼承產品介面,修改工廠類中的**就可以實現擴充套件.
sunny軟體公司開發人員發現在建立具體chart物件時,每更換乙個chart物件都需要修改客戶端**中靜態工廠方法的引數,客戶端**將要重新編譯,這對於客戶端而言,違反了「開閉原則」.
簡單工廠模式提供了專門的工廠類用於建立物件,將物件的建立和物件的使用分離開,它作為一種最簡單的工廠模式在軟體開發中得到了較為廣泛的應用。
設計模式 建立型 工廠 簡單工廠模式
動態決定哪個類被例項化,不必事先知道哪個類要被例項化!三 舉例 qq裡面常用發表情的 1 表情 b new smile 這種應該是很熟悉的建立方式 2 表情 b 表情工廠.createbiaoqing 表情內容 四 角色與結構 工廠類角色 creator bqfctory,在creat方法下建立產品...
設計模式 建立型 簡單工廠模式
建立型模式中工廠模式有三兄弟,先從簡單工廠講起。工廠模式中包含了產品與工廠兩個物件,其中產品是是乙個個具體的物件,而工廠負責生產這些產品。例如現在我們的需求是有兩個食品要在食品廠加工。兩個食品分別叫做麵包和巧克力,要在食品廠加工。通過需求分析出應該有如下幾個類,麵包類 巧克力類 食品加工廠類。由於麵...
設計模式 建立型 簡單工廠
之前學習了設計模式的原則,下面我們正式學習這些模式。設計模式分為了三個大類分別是建立型模式 結構型模式 和行為型模式。首先建立型模式 顧名思義他是用來描述如何建立物件的 建立型模型的分類 簡單工廠模式 抽象工程模式,單例模式 原型模式 建造者模式。簡單工廠 提供了專門的工廠類用於建立物件 將物件的建...