設計模式-簡單工廠(Demo)
簡介
工廠都是建立型模式、用來NEW類的、本文章用一個故事講述了簡單工廠模式
故事
在遙遠的未來、chenchen我生活條件不錯、但是每天都要做飯、chenchen很懶、只想吃、不想幹、所以就請了個女僕給chenchen做飯吃、女僕很牛、chenchen只要說、我要吃牛排、不一會、牛排就做好了放在桌子上、我又說還要紅酒、女僕開好紅酒、倒好放在桌子上、美滋滋的哈!小肉吃著、小酒喝著、美女陪著此等逍遙快活!
是什麼?
代替客戶端NEW類、客戶端與多個類解耦
為什麼要用?
上述故事、因為我做很多飯、要知道很多飯怎麼做、我很懶、不想做、不想那麼累、所以我找了一個漂亮的女僕給我做飯、女僕就是工廠、代替我去做飯、也就是代替我去NEW類、這樣讓我與飯菜解耦、我無須知道怎麼做飯、只要告訴女僕我要吃什麼就行啦!
UML圖(女僕是工廠累)
實現效果
程式碼
<span style="font-size:18px;"> Public Class Maid '女僕類 Function MakeFood(eat As String) As Food '根據chenchen傳入要吃的食物返回做出的飯(NEW出的類) Dim food As Food '生命食物 Select Case eat '選擇要做的食物(new的類) Case "牛排" food = New Beef 'new了一個牛排類 Case "紅酒" food = New RedWine End Select Return food '返回食物 End Function End Class Public MustInherit Class Food '抽象食物類 Overridable Function Edible() As String '被食用的方法 End Function End Class Public Class Beef : Inherits Food '牛排類 Overrides Function Edible() As String Dim str As String str = "牛排:我被吃掉~\(≧▽≦)/~啦啦啦" Return str End Function End Class Public Class RedWine : Inherits Food '紅酒類 Overrides Function Edible() As String Dim str As String str = "紅酒:我被喝掉~\(≧▽≦)/~啦啦啦" Return str End Function End Class '單機按鈕 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim nvpu As New Maid '例項化女僕 Dim Food As String '申明食物 Food = ComboBox1.Text '要吃的食物給Food變數 Label1.Text = nvpu.MakeFood(Food).Edible() '(女僕.做飯(牛排).吃掉) '就是呼叫女僕工廠例項話出的紅酒類、使用它的吃方法 End Sub</span>
擴充套件
上面故事說到如果我再新增一個需求、義大利麵怎麼辦???
1 新增義大利麵類
<span style="font-size:18px;"> Public Class Noodles : Inherits Food '義大利麵類 Overrides Function Edible() As String Dim str As String str = "義大利麵:我被我吃掉~\(≧▽≦)/~啦啦啦" Return str End Function End Class</span>
2 更改工廠
Public Class Maid '女僕類
Function MakeFood(eat As String) As Food '根據chenchen傳入要吃的食物返回做出的飯(NEW出的類)
Dim food As Food '生命食物
Select Case eat '選擇要做的食物(new的類)
Case "牛排"
food = New Beef 'new了一個牛排類
Case "紅酒"
food = New RedWine
Case "義大利麵"
food = New RedWine
End Select
Return food '返回食物
End Function
End Class
3效果(這裡忘了點吃按鈕了、所以沒改過來、會盡快改正)
優點
將客戶端與多個類解耦、只要知道工廠類和需求就能NEW類、解耦的類更改不會影響客戶端、形象點說類A、B、C呼叫類1、2、3、每個類都呼叫1、2、3這三個類如果1、2、3的類有更改、比如名字、叫4、5、6、了,那A、B、C這三個類每個關於123這三個類的都要改、如果中間加個工廠、只要改工廠就好啦。
缺點
違背開放封閉原則、每次新增一個類都要改次工廠、其實簡單工廠嚴格的來說不是設計模式。
在哪用?
多個類要呼叫多個類、多對多、中間加個工廠如圖
-----修改前
-----修改後
也不知道說啥了…………寫個部落格花了2小時………………感覺沒啥可說的 = =
———————————寫了2個小時…………———————————
———————chenchen————————