Decorator Design Pattern(1)Handsome & Handsome 早餐店 by Michael | CodeData
top

Decorator Design Pattern(1)Handsome & Handsome 早餐店

分享:

生意還不錯的早餐店

一家叫作「Handsome & Handsome」的早餐店已經散佈在大街小巷裡,在你上班或上學的路程中,你可以算算看會經過幾間這家連鎖早餐店,如果路途夠遠的話,說不定會超過十家以上。

在他們快速擴張時,早餐的種類也越來越多,多到連價格都很難計算。所以他們打算在每一家早餐店放一台特製的電子式收銀機,這台機器裡可以執行自己開發的Java程式。

decorator_01_01

資訊部門的主管Simon為了展示他在書本中學到東西,它先在紙上畫了上列的圖型。Simon很得意的將它展示給同事後,再繼續他未完成的工作:

decorator_01_02

在畫出上面的圖型後,連他最喜歡吃的火腿玉米蛋餅都還沒有畫出來,Simon就有點想要放棄了。這個圖型看起來有點像是一幅抽象畫,而不是一個UML類別圖型。

decorator_01_03

就算如此,Simon的腦海中仍然決定要照著這樣的設計繼續往下作(Simon第一本Java書的作者是Dr. Inheritance)。不過他想到了另外一個問題:如果雞蛋漲價了:

decorator_01_04

程式總是需要維護的

Simon總算有考慮到「維護」的問題,他也想起一個關於繼承重要的特性:把共有的特性移到父類別中。所以Simon把早餐的類別改成這樣:

decorator_01_05

到目前為止,Simon總算鬆了一口氣,因為畫出來的圖型不會像是一幅抽象畫了:

decorator_01_06

還是不行

這樣的設計應該不會有問題了吧?就在這個時候,Simon聽到遠處飄來秘書Kelly跟Jo的對話:

Kelly:今天早餐吃了一個超級三明治,真是過癮!
Jo:什麼超級三明治這麼厲害?
Kelly:可厲害了,它有兩個蛋,三片火腿和兩份生菜。喔!飽到連午餐都不用吃了。

聽到這段對話以後,Simon的腦海中浮現一個畫面:

decorator_01_07

目前的設計似乎沒有辦法解決這個問題,所以Simon真的得放棄之前所有的設計,開始尋找一個可以解決所有問題的設計方法。

decorator_01_08

decorator_01_09

你可以把這樣的設計方法稱為「在編譯時期決定所有物件的特性和功能」。所以你必須換個角度來思考這類的問題。

decorator_01_10

後續 >> Decorator Design Pattern(2)I/O Stream API

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

熱門論壇文章

熱門技術文章