Groovy 设计模式 -- 抽象工厂 模式
?
抽象工廠
https://blog.csdn.net/wyxhd2008/article/details/5597975
首先來看看這兩者的定義區別:
工廠模式:定義一個用于創建對象的借口,讓子類決定實例化哪一個類
抽象工廠模式:為創建一組相關或相互依賴的對象提供一個接口,而且無需指定他們的具體類
?????? 個人覺得這個區別在于產品,如果產品單一,最合適用工廠模式,但是如果有多個業務品種、業務分類時,通過抽象工廠模式產生需要的對象是一種非常好的解決方式。再通俗深化理解下:工廠模式針對的是一個產品等級結構 ,抽象工廠模式針對的是面向多個產品等級結構的。
再來看看工廠方法模式與抽象工廠模式對比:
?
| 工廠方法模式 | 抽象工廠模式 |
| 針對的是一個產品等級結構 | 針對的是面向多個產品等級結構 |
| 一個抽象產品類 | 多個抽象產品類 |
| 可以派生出多個具體產品類 | 每個抽象產品類可以派生出多個具體產品類 |
| 一個抽象工廠類,可以派生出多個具體工廠類 | 一個抽象工廠類,可以派生出多個具體工廠類 |
| 每個具體工廠類只能創建一個具體產品類的實例 | 每個具體工廠類可以創建多個具體產品類的實例 |
???????
?
?
簡單工廠
https://www.cnblogs.com/zhangchenliang/p/3700820.html
這個模式本身很簡單而且使用在業務較簡單的情況下。一般用于小項目或者具體產品很少擴展的情況(這樣工廠類才不用經常更改)。
它由三種角色組成:
工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,根據邏輯不同,產生具體的工廠產品。如例子中的Driver類。
抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。由接口或者抽象類來實現。如例中的Car接口。
具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現,如例子中的Benz、Bmw類。
?
?
抽象工廠 和 工廠模式 區別:
https://www.zhihu.com/question/20367734
作者:名姓鏈接:https://www.zhihu.com/question/20367734/answer/115807228
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
工廠模式也就是鼠標工廠是個父類,有生產鼠標這個接口。
戴爾鼠標工廠,惠普鼠標工廠繼承它,可以分別生產戴爾鼠標,惠普鼠標。
生產哪種鼠標不再由參數決定,而是創建鼠標工廠時,由戴爾鼠標工廠創建。
后續直接調用鼠標工廠.生產鼠標()即可
抽象工廠模式
抽象工廠模式也就是不僅生產鼠標,同時生產鍵盤。
也就是PC廠商是個父類,有生產鼠標,生產鍵盤兩個接口。
戴爾工廠,惠普工廠繼承它,可以分別生產戴爾鼠標+戴爾鍵盤,和惠普鼠標+惠普鍵盤。
創建工廠時,由戴爾工廠創建。
后續工廠.生產鼠標()則生產戴爾鼠標,工廠.生產鍵盤()則生產戴爾鍵盤。
?
DEMO
http://groovy-lang.org/design-patterns.html#_example
def guessFactory = [messages: GuessGameMessages, control: GuessGameControl, converter: GuessGameInputConverter] def twoupFactory = [messages: TwoupMessages, control: TwoupControl, converter: TwoupInputConverter] class GameFactory { def static factory def static getMessages() { return factory.messages.newInstance() } def static getControl() { return factory.control.newInstance() } def static getConverter() { return factory.converter.newInstance() } }?
GameFactory.factory = twoupFactory def messages = GameFactory.messages def control = GameFactory.control def converter = GameFactory.converter println messages.welcome def reader = new BufferedReader(new InputStreamReader(System.in)) while (control.moreTurns()) { def input = reader.readLine().trim() control.play(converter.convert(input)) } println messages.done轉載于:https://www.cnblogs.com/lightsong/p/8655147.html
總結
以上是生活随笔為你收集整理的Groovy 设计模式 -- 抽象工厂 模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言-文本挖掘
- 下一篇: 知识管理系列---3.程序实现