java 板


LINE

O'Relly的head first design patterns有些例子不錯, 但Factory Method這邊我看不太懂意義在哪.... 想麻煩大家解答一下︰ 書上一開始從Simple Factory模式著手,接著用現成的案例延伸到工廠方法模式。 首先他們用pizza類比為工廠產品,PizzaShop負責丟出產品生產與加工後的結果 而SimpleFactory則作為PizzaShop類別的建構子參數,簡單說就是這樣︰ public PizzaShop(SimpleFactory simpleFactory){ this.simpleFactory = simpleFactory; } public Pizza orderPizza(){ Pizza pizza = simpleFactory.createPizza(); //以上是物件的生產過程 以下是處理物件的SOP流程 pizza.bake(); pizza.box(); return pizza; } 到這邊我都明白這樣做的用意︰ 產生物件與處理物件的SOP流程應該要分開,這樣才不會改一項就動到整個類別。 可是當這例子延伸到工廠方法模式之後,我就不明白為什麼要定義抽象方法? 工廠模式下,PizzaShop變成抽象類別 public Pizza orderPizza(){ Pizza pizza = createPizza(); //內容和上個例子相同 故省略 } public abstract Pizza createPizza(){ //交給次類別實作 } 書上在這邊是說,PizzaShop類別不需要了解次類別的實作方式就能取得物件。 因此,當產生物件的工廠有好幾種時,就不用像簡單工廠模式那樣, 需要產生多種參數不同的建構式給不同的工廠類別。 選擇實作createPizza次類別的同時,也就決定了產生物件的工廠種類。 但我的問題是,PizzaShop類別可以透過泛型,統一所有工廠類別的呼叫方法, 那為什麼要在PizzaShop設計抽象方法呢? 例如︰ public class PizzaFactory{ public Pizza createPizza(){ //繼承後可覆寫的內容,或是createPizza直接設計為抽象類別 } } public class PizzaShop<F extends PizzaFactory>{ private F factory; public PizzaShop(F factory){ this.factory = factory; } //建構式 public Pizza orderPizza(){ Pizza pizza = factory.createPizza(); //下略 一樣是處理pizza的SOP流程 } } 寫成這樣,可以同時搞定簡單工廠模式的目地--生產與加工分離, 而且還能彈性地決定生產物件的工廠種類--也就是工廠方法模式想達到的目地, 同時還可以讓物件工廠彼此的生產過程都能有些不同,不需限制細節。 因此我不明白工廠方法模式搞到這麼複雜的意義在哪裡....? 他們到底是想鬆綁哪些物件之間的依賴關係啊? 工廠方法模式的精髓是在哪裡呢? 還是說,這個模式的發展背景是在Java還沒有泛型的年代, 他們只好用這個模式來解決問題? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.147.11
1F:→ ogamenewbie:你或許可以去查一下 interface 的 method 是... 08/29 03:58
2F:推 akaing:http://mindprod.com/jgloss/interface.html 08/29 07:02
沒事,我只是不太熟泛型罷了.... 給人貼上interface的基礎定義實在很冏.... 最後的例子原先是用泛型內繼承寫的,寫了以後,想說看能不能增加工廠類別 實作上的彈性,於是直覺地以為可以限制泛型裡填入的類別都實作特定介面 供orderPizza()呼叫就好,而不必非得要繼承自某個物件.... 結果我卻忘記泛型裡面不能implements interface,現在我改回原本構想的樣子。 只是改了以後的物件操作方式就和工廠方法模式類似了....
4F:→ qrtt1:抽象方法會比泛型複雜嗎!? 08/29 12:00
哈,是沒錯啦,泛型沒有比抽象方法單純....而且潛藏一些初始化過程不當使用的危險 不過原本例子改回當初構想的樣子之後,用哪種方法都沒有什麼本質上的差別。 我想應該就可以不用再討論用哪種方法實作工廠方法比較好囉.... ※ 編輯: dream1124 來自: 61.228.46.154 (08/29 12:08)
5F:→ qrtt1:那建議您重寫一個問題唄. 不然後續想回的人, 有點難理解 08/29 12:11
6F:→ qrtt1:潛藏一些初始化過程不當使用的危險=>不太明白, 有例子嗎? 08/29 12:59







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP