設計模式 工廠方法(Demo)

2021-09-08 03:56:16 字數 4095 閱讀 3956

工廠方法

工廠方法跟簡單工廠一樣、都是建立型的設計模式、他攻克了簡單工廠的違背開放封閉的缺點。

故事

主人……人家做飯好累的、女僕抱著我大腿說著、自從上次把她買進家、沒做了幾次飯就喊累……看著她那出處可憐的眼神、罷了、再招幾個女僕吧、話說還沒給第乙個女僕起名字、就叫『遙』吧、後來又招了『媛』和『悅』、然後讓她們分別僅僅做一道菜、遙做牛排、媛做紅酒、悅做義大利面、這次每次我想吃牛排就直接跟遙說『吃飯』,喝紅酒就跟媛說『吃飯』而不用說吃什麼了、由於她們每乙個人僅僅做一道菜、以後要再想吃別的、就再招個女僕、僅僅做一道菜、也不影響現有的女僕、這樣她們也不會抱怨嘍、美女圍繞、喝酒吃肉、神仙快活——

------uml圖

如圖所看到的、原先的女僕工廠換成了女僕介面、然後有特定的女僕去做個個食物、這種優點就是、假設在加乙個食物、僅僅要再加乙個女僕工廠、再加個食物類即可了、不違背開放封閉原則、不像簡單工廠還要改動工廠類。

'女僕介面

public inte***ce imaid

function imakefood() as food '做食物的方法

end inte***ce

'女僕遙

public class yao : implements imaid

public function imakefood() as food implements imaid.imakefood

return new beef '返回牛排例項化的類

end function

end class

'女僕媛

public class yuan : implements imaid

public function imakefood() as food implements imaid.imakefood

return new redwine '返回紅酒例項化的類

end function

end class

'女僕悅

public class yue : implements imaid

public function imakefood() as food implements imaid.imakefood

return new noodles '返回義大利面例項化的類

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

public class noodles : inherits food '紅酒類

overrides function edible() as string

dim str as string

str = "義大利面:我被我吃掉~\(≧▽≦)/~啦啦啦"

return str

end function

end class

'單機button

private sub button1_click(sender as object, e as eventargs) handles button1.click

dim yao as imaid = new yao '宣告女僕例項化遙

label1.text = yao.imakefood().edible() '遙做牛排

end sub

private sub button2_click(sender as object, e as eventargs) handles button2.click

dim yuan as imaid = new yuan '宣告女僕例項化媛

label1.text = yuan.imakefood().edible() '媛做牛排

end sub

private sub button3_click(sender as object, e as eventargs) handles button3.click

dim yue as imaid = new yue '宣告女僕例項化悅

label1.text = yue.imakefood().edible() '悅做牛排

end sub

end class

實際效果

擴充套件

再加乙個女僕櫻類、加乙個披薩食物類

public class pizz : inherits food '披薩

overrides function edible() as string

dim str as string

str = "披薩:我被吃掉~\(≧▽≦)/~啦啦啦"

return str

end function

end class

'女僕櫻

public class ying : implements imaid

public function imakefood() as food implements imaid.imakefood

return new pizz '返回披薩例項化的類

end function

end class

『單機button加乙個

private sub button4_click(sender as object, e as eventargs) handles button4.click

dim ying as imaid = new ying '宣告女僕例項化櫻

label1.text = ying.imakefood().edible() '櫻做披薩

end sub

效果圖

優點、兩張圖帶

用設計模式之前的多對多關係、假設在加乙個食物、你我他三個類都要做更改

用設計模式之後的、僅僅要知道工廠類即可了、與食物類解耦和、擴充套件的話就加乙個食物類加乙個工廠類、client呼叫即可

—————————————————夠明顯了吧—————————————————

——————————工廠方法——————————

————chenchen————

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

設計模式 工廠方法

設計模式 工廠方法 工廠方法與抽象方法 面向介面程式設計可以提高 的靈活性 可以橫向擴充 切忌不能使用面向實現的程式設計,這樣做不便於以後業務的擴充和 的靈活性。工廠方法 就是把 new class 的過程交給 factory來做.構造類的細節不需要我們知道。比如 構造乙個 list 我們可以這樣寫...

設計模式 工廠方法

簡單工廠針對擴充套件時需要修改 違反了ocp 開閉原則 而工廠方法模式在擴充套件時,更滿足ocp。當然比較簡單工廠模式,工廠方法模式有一組實現了相同介面的工廠類,而簡單工廠模式就只有乙個工廠類。和簡單工廠方法一樣,還是以生成汽車為例子。定義要生成的物件的公共介面 public inte ce car...