作者loveme00835 (最愛朴素妍)
看板C_and_CPP
標題Re: [問題] 抽像工廠與工廠方法
時間Sun Nov 28 03:16:54 2010
※ 引述《rosemary0401 (rosemary0401)》之銘言:
: 小妹最近再看Design pattern的相關知識,
: 但卻不太清楚,用了這些pattern會有什麼好處,反而覺得更加得複雜了。
: 故想跟各位前輩請教,
: Abstract Factory實際上就是多個Factory Method是嗎?
: 能不能舉個例子,如果沒有Abstract Factory或是沒有Factory Method會帶來什麼不便?
: 謝謝
雖然他們都有「工廠」兩個字,不過目的卻不太一樣:
┌──┬─────────┬──────────┐
│名稱│工廠方法 │抽象工廠 │
├──┼─────────┼──────────┤
│目的│規定物件的製程。也│為了產出不同組合的物│
│ │就是在使用物件前依│件,有點像速食店套餐│
│ │序呼叫不同的成員函│的概念。 │
│ │式完成準備的工作。│ │
└──┴─────────┴──────────┘
可以說
工廠方法著重在產品的多型,抽象工廠著重在工廠的多型。
與其說會造成什麼不便,先來講講為什麼 Design Patterns要莫名
多一堆介面好了:
1.操作統一
因為規定了子類別一定要實現的操作,所以使用上可以
一視同仁
嗯..就是這麼簡單, 而且因為多型的支援, 你可以任意增加不同的
類別完成新功能,而無須改動太多原本的程式碼。
─────────────────────────────
使用設計模式就好像在烹調各式各樣的菜餚,你可以跟人家說你煮
的是「步步高升」,而不用講「一湯匙米酒+兩湯匙冰糖+三湯匙
..」。
設計模式就是食譜,大概說明了每道菜的材料以及作法,直接拿來
套用總比你想到什麼就加什麼來得保險;不過像四川菜泰國菜還是
要依照家人口味調整香料的比例。而且「六菜碗」也不適合在新年
的時候準備。
有互動的類別形成一個模組,他們以介面為協定來溝通,所以仔細
了解
介面存在的原因,妳要改良成家常菜也不是多麼困難的事情!
雖然例子網路上找得到很多,還是要
透過實作以及遇到
需求變更才
能體會它為我們帶來「不用修改太多程式」的便利性,現階段Head
First Design Patterns、GoF 的 Design Patterns 花時間讀過一
便有個概念就好,覺得可能需要用到再回來翻一下,真正有收穫的
應該是 ─ 解決問題的時候。
─────────────────────────────
找個簡單又剛好是 C++的例子真不容易,我看過最好懂的應該是
Head First Design Patterns上的範例了,剛剛轉譯程式碼轉到快
瘋掉,只好放棄...
有興趣可以參考它上面的第四章,以及範例程式(java)
網路版:
http://ppt.cc/YrW4
程式碼:
http://ppt.cc/zY!i
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█
T-ara版怎麼去
████◤
██
◢██◣█
██
████
██
s ~>
T-ara
█/███
██
██
██
█/█ ◢█
██
█/█
歡迎您的光臨
████◤
██
██
██
██◤
███◤
██◤
恩靜、
智妍、
孝敏
█/███
██
█/█
█◤
██
█/██
██
素妍、
居麗、
寶藍
████◤
█◤
◥██◤ █◤
████◤
█◤
ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
推 purpose:推。看完有比較懂一點了,但還沒完全理解,晚點再翻翻資料 11/28 03:36
推 nowar100:m 11/28 10:26
推 rosemary0401:有比較了解 謝謝您 11/28 11:11
→ yoco315:謝謝愛我大大,看完之後有比較了解了 11/28 12:44
推 softwind:太抽象了啦 有沒有sample... 11/28 13:46
晚點補上@_@
推 tomap41017:大大太厲害了,受小弟一拜 11/28 14:48
推 hilorrk:稍微有點頭緒了 謝謝大大的講解 11/28 16:47
推 james732:我之前也弄不清楚,推! 11/28 16:48
推 VictorTom:路過看不懂也推~~ 11/28 20:51
推 purpose:剛稍微查了一下,HFDP 歐萊禮的出版日期是2004,到底2008 11/29 01:20
→ purpose:是什麼意思還是搞不懂... 11/29 01:20
那為了避免爭議放品質比較好的2004好了 XD 電子書倒是2008
偏多, 內容也沒什麼差別.
※ 編輯: loveme00835 來自: 140.121.197.115 (11/29 02:22)
→ purpose:這版不錯,謝了 11/29 02:39