設計模式 簡單工廠(Demo)

2021-06-23 04:00:04 字數 3411 閱讀 2437

簡介

工廠都是

建立型模式、用來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 我們需要獲取某個水果的類,要從農場主那裡去獲取某個水果的例...