閱讀"高煥堂","Google Android 設計招式之美"的心得
此書不是直接給出最終Pattern的樣子,而是描述如何直覺的演變出最終型態(以Android Framework為例), 熟悉這個過程會比較能欣賞高竿的程式代碼, 自己設計系統時, 也能用進階的想法去處理, 擺脫土法煉鋼的寫法
若可以在做系統設計時,把這13個Pattern套進去, GoF的23個, 倒是以後再說, 能融會13招的武學, 雖不能稱霸武林, 但已經可以稱得上是俠客了吧, 絕對超越一般憑藉蠻力的莽夫
試著讓每個系統都能引用這13個Pattern, 畫出System Block Diagram with 13 Patterns
(我的理解, 以產品生產流程為例)(TBD: 以咖啡自動販賣機為例)
1. Template Method : 用繼承(Inheritance)方式, 依工廠產品的模板生產具差異化功能產品
2. Factory Method : 定義工廠生產表單(Factory Method), 業務(Client)依照產品需求填寫, 工廠依照表單廠內生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節
3. Observer : 用委託(Delegation)方式, 依工廠產品的模板委外生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節
4. Abstract Factory : 業務(Client)依照產品需求下單給代工廠,代工廠(Abstract Factory)自己依照產品類別調整產線(+ Observer or Template Method), 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節(Service in Android)
5. Adapter : 代工廠將工廠出產的產品或是組件, 配合客戶需要包裝新的ID, 但內容並沒有改變; 將角色之間的行為規範再抽出更好用的介面, 封包了複雜或不直覺的底層行為(repackage Binder.onTransact() in Android)
6. Composite: 產品的BOM (ListView in Android)
7. Strategy: 半成品組件, 可以簡化BOM, 如果是單純生產半成品的工廠, 就可套用生產產品相關的pattern. (BaseAdapter for ListView)
8. State: 產品所處狀態, 從接單,生產到出貨之間的過程和狀態
9. Proxy: 和Adapter一樣的用意, 但與其背後之代理對象有一樣的介面,可視為真正的分身(AIDL code gen in Android)
10. Bridge: 使用同一介面橋接各種技術(包括程式語言, OS Platform, media codec)
11. Iterator: use Cursor to manipulate Records(Cursor or Iterator in Android)
12. Mediator: 工廠裡的生產管制中心, 協調各單位, 統一溝通管道(可以利用Adapter重新包裝溝通介面)(The class that implement the Listener of View in Android)(Binder Driver in Android)
13. Facade: 最外圍的介面, 以網路磁碟(NAS)為例, 網路介面是最外圍的介面, 裡面可能是直接硬體儲存, 或是多了一層Adapter, 例如1394, USB, eSATA, Network...; 郵政信封的格式規範;
沒有留言:
張貼留言