首先我們為什麼要學習設計模式呢?
1)模式從經驗中總結出來的,經過證實的方案,模式只有在實際系統中經過多次驗證之後才能成為模式.
2) 提高系統的可維護性, 通過使用設計模式,在系統面臨公升級和維護時,將把維護成本控制在最低的水平上.
3) 增加表達能力: 設計模式有很強的語言表述性. 設計模式是對解決方案的總結,使得設計模式能夠更好的傳達和交流,成為開發人員之間的一種共通語言,從而被更多的開發人員使用,反過來促進設計模式的發展和應用.
4)幫助我們更好的進行軟體設計.
1 模式的概念:是具有代表性的重複性問題及其解答方案.
模式包含的要素:模式的名稱 該模式所能解決的問題 解決方案 使用該模式後的效果
工廠模式
定義:工廠模式就是集中建立例項物件
使用工廠模式的好處:
1)客戶類和實現類分開。消費者任何時候需要某種產 品,只需向工廠請求即可。消費者無須修改就可以接納新產品
2)物件的建立由工廠來完成, 類之間的耦合大大減少,變成為類和工廠之間的耦合了.
3)物件的建立和使用分離,達到解耦合的目的。
一:簡單工廠模式
eg:工廠生產水果 需要生產蘋果,香蕉,梨子
我們需要建立 蘋果類,香蕉類,他們都有乙個共同的行為就是生產,所以我們需要把它們共同的行為抽出來。
寫乙個最簡單的**:
1public
inte***ce
fruit
1public
class banana implements
fruit67
}89 //蘋果類
10public
fruit
1516}17
18 //梨子類
19public
class pear implements
fruit
2627 }
1public
class
******factory 67
public
banana getbanana()10}
11
1public
class
test
1112 }
如果需要生產梨子,橘子等等其他的水果的話,就需要建立很多的水果類,並且在******factory需要寫得到各種水果的方法,在客戶端還需要new各種水果的物件,這樣對於開閉原則支援不夠!還是根據情況來設計模式!
二:工廠方法模式
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化委託給子類
還是以水果工廠為例:
我們需要建立 有乙個水果介面,裡面存在乙個生產水果的方法. 蘋果類. 蘋果工廠生產蘋果的類實現乙個工廠生產水果的介面, 乙個工廠生產水果的介面。客戶端
建立一種水果的**:
1//水果介面
2public
inte***ce
fruit 78
9//蘋果類實現水果介面
10public
fruit
1516}17
1819
//工廠得到水果介面
20public
inte***ce
ifactorymethod
2526
27//
蘋果工廠實現得到水果介面
2829
public
ifactorymethod
3536}37
38//
客戶端39
public
class
test
4849 }
三:抽象工廠模式
為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類。(多個產品系列,多個工廠方法一起就構成了抽象工廠模式。)
在設計抽象工廠模式的時候會涉及到乙個詞:產品族
什麼事產品族:是指位於不同產品等級結構中功能相關聯的產品組成的家族。抽象工廠模式所提供的一系列產品就組成乙個產品族;而工廠方法提供的一系列產品稱為乙個等級結構。
我們還是依然用水果工廠來舉例:比如說我們的客戶是需要的各種水果還分為北方或是南方的水果;還是使用蘋果吧!
這裡我們先分析要怎麼去設計這個工廠: 水果介面(顯示水果資訊), 蘋果類, 南方蘋果(),北方蘋果(), 抽象工廠的角色(介面),具體工廠的角色(南方工廠,北方工廠),客戶端
1//水果介面
2public
inte***ce
fruit 78
//抽象蘋果
9public
abstract
fruit
1415
//北方蘋果
16public
1718
@override
19public
void
showinfo()
2324}25
26//
南方蘋果
2728
public
2930
@override
31public
void
showinfo()
3536}37
38//
抽象工廠(介面)
3940
public
inte***ce
abstractfactory
4748
//南方工廠
4950
public
class southfactory implements
abstractfactory
5758
/*@override
59public friut getpear()
*/6263}
6465
//北方工廠
6667
public
class northfactory implements
abstractfactory
7374
/*@override
75public fruit getpear()
*/7879}
8081
//客戶端
82public
class
test
9293 }
這樣客戶端只需要建立具體工廠的例項,然後呼叫工廠物件的工廠方法就可以得到所需要的產品物件。
其優點:
分離介面和實現
客戶端使用抽象工廠來建立需要的物件,而客戶端根本就不知道具體的實現是誰,客戶端只是面向產品的介面程式設計而已。也就是說,客戶端從具體的產品實現中解耦。
其缺點:
不太容易擴充套件新的產品
如果需要給整個產品族新增乙個新的產品,那麼就需要修改抽象工廠,這樣就會導致修改所有的工廠實現類。
這樣我們要增加水果種類的時候,只需要增加各類抽象水果,各類南方水果類,各類北方水果類。再到南北方工廠中增加得到增加水果的方法。
最後: 無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦。
什麼時候該使用什麼模式,我也不太清楚,還需要大家去實踐,也要看客戶有怎樣的要求!
建立型模式之 工廠模式
設計模式中我們將工廠模式分了三種 簡單工廠模式,工廠方法模式,抽象工廠模式。其實我們可以看作兩類,也就是工廠方法模式和抽喜工廠模式,他們兩個都屬於建立型模式,就寫在一起對照參考 將簡單工廠模式看成是工廠方法模式中的乙個特例。下面我們來對比工廠方法模式和抽象工廠模式。首先我們以乙個例子為參考,看一下工...
建立型模式之簡單工廠模式
複習用,不適合初學。複習用,不適合初學。複習用,不適合初學。1.定義 factory pattern 簡單工廠模式又稱為靜態 static 工廠模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。2.角色 f...
建立型模式之工廠模式實現
工廠方法模式同樣屬於類的建立型模式又被稱為多型工廠模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠...