簡介
工廠都是
建立型模式、用來new類的、本文章用乙個故事講述了簡單工廠模式
故事
在遙遠的未來、chenchen我生活條件不錯、但是每天都要做飯、
chenchen很懶、只想吃、不想幹、所以就請了個女僕給chenchen做飯吃、女僕很牛、chenchen只要說、我要吃牛排、不一會、牛排就做好了放在桌子上、我又說還要紅酒、女僕開好紅酒、倒好放在桌子上、美滋滋的哈!小肉吃著、小酒喝著、美女陪著此等逍遙快活!
是什麼?
代替客戶端new類、客戶端與多個類解耦
為什麼要用?
上述故事、因為我做很多飯、要知道很多飯怎麼做、我很懶、不想做、不想那麼累、所以我找了乙個漂亮的女僕給我做飯、女僕就是工廠、代替我去做飯、也就是代替我去new類、這樣讓我與飯菜解耦、我無須知道怎麼做飯、只要告訴女僕我要吃什麼就行啦!
uml圖(女僕是工廠累)
實現效果
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
擴充套件
上面故事說到如果我再新增乙個需求、義大利面怎麼辦???
1 新增義大利麵類
public class noodles : inherits food '義大利麵類
overrides function edible() as string
dim str as string
str = "義大利面:我被我吃掉~\(≧▽≦)/~啦啦啦"
return str
end function
end class
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————————
設計模式 工廠方法(Demo)
工廠方法 工廠方法跟簡單工廠一樣 都是建立型的設計模式 他攻克了簡單工廠的違背開放封閉的缺點。故事 主人 人家做飯好累的 女僕抱著我大腿說著 自從上次把她買進家 沒做了幾次飯就喊累 看著她那出處可憐的眼神 罷了 再招幾個女僕吧 話說還沒給第乙個女僕起名字 就叫 遙 吧 後來又招了 媛 和 悅 然後讓...
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...
工廠模式demo
乙個事例 乙個農場,要向市場銷售水果 農場裡有三種水果 蘋果 葡萄 我們設想 1 水果有多種屬性,每個屬性都有不同,但是,他們有共同的地方 生長 種植 收貨 吃 2 將來有可能會增加新的水果 我們需要定義乙個介面來規範他們必須實現的方法 3 我們需要獲取某個水果的類,要從農場主那裡去獲取某個水果的例...