(原創) 學習Design Pattern的小技巧 (OO) (Design Pattern)
2007-09-06 20:23
537 查看
Abstract
很多人學習Design Pattern,總是被眾多的class暈了頭,認為Design Pattern是『化簡為繁』,因此抓不到學習的重點,在此分享一下我的學習心得。
Introduction
關於學習Design Pattern,以下是我的兩點建議
1.將重點放在class diagram上,不要放在example code上
每本書的example code都不一樣,有的很簡單,有的很複雜,甚至牽涉到domain或algorithm,這樣反而將容易失焦。example code目的只是要我們了解Design Pattern,而非迷失在example code中,將焦點重新放在class diagram上,思考整個架構的意義。
2.從client體會Design Pattern的美
Design Pattern就是為了『擁抱變化』,所以將來若『需求改變』,能讓client的main()完全不需改變,或僅做很少的改變,則是Design Pattern的目的。這也是為什麼Design Pattern 3大原則第一條就是說:『Program to an interface, not an implementation』。但凡事都是trade-off,要讓client漂亮,換來的就是library的class變多變複雜了,所以我常從client的角度去思考,體會Design Pattern的美。
3.熟記並理解每個pattern的Intent(目的)
因為Design Pattern都是基於多型/多態,都是靠delegation的手法,所以很多pattern非常的像,甚至可以說某個pattern指是另外一個pattern的特例(如strategy和bridge就非常的像,strategy可以說是bridge的特例),搞清楚pattern的intent,才能用對pattern,並與別人溝通。
很多人學習Design Pattern,總是被眾多的class暈了頭,認為Design Pattern是『化簡為繁』,因此抓不到學習的重點,在此分享一下我的學習心得。
Introduction
關於學習Design Pattern,以下是我的兩點建議
1.將重點放在class diagram上,不要放在example code上
每本書的example code都不一樣,有的很簡單,有的很複雜,甚至牽涉到domain或algorithm,這樣反而將容易失焦。example code目的只是要我們了解Design Pattern,而非迷失在example code中,將焦點重新放在class diagram上,思考整個架構的意義。
2.從client體會Design Pattern的美
Design Pattern就是為了『擁抱變化』,所以將來若『需求改變』,能讓client的main()完全不需改變,或僅做很少的改變,則是Design Pattern的目的。這也是為什麼Design Pattern 3大原則第一條就是說:『Program to an interface, not an implementation』。但凡事都是trade-off,要讓client漂亮,換來的就是library的class變多變複雜了,所以我常從client的角度去思考,體會Design Pattern的美。
3.熟記並理解每個pattern的Intent(目的)
因為Design Pattern都是基於多型/多態,都是靠delegation的手法,所以很多pattern非常的像,甚至可以說某個pattern指是另外一個pattern的特例(如strategy和bridge就非常的像,strategy可以說是bridge的特例),搞清楚pattern的intent,才能用對pattern,並與別人溝通。
相关文章推荐
- (原創) 我的Design Pattern之旅[2]:Template Method Pattern (OO) (Design Pattern) (C++)
- (原創) 我的Design Pattern之旅[5]:Facade Pattern (OO) (Design Pattern) (C/C++)
- (原創) 我的Design Pattern之旅[6] : Adapter Pattern (OO) (Design Pattern) (C/C++) (.NET) (C#) (C++/CLI) (VB)
- (原創) 我的Design Pattern之旅[1]:Strategy Pattern (OO) (Design Pattern) (C/C++) (template) (.NET) (C#)
- (原創) Design Pattern書籍介紹 (OO) (Design Pattern)
- (原創) 我的Design Pattern之旅[3]:使用template改進Strategy Pattern (OO) (Design Pattern) (C/C++) (template)
- (原創) 回讀者的信,一篇學習C#/C++/OO的FAQ (OO) (Design Pattern) (C/C++) (.NET) (C#)
- (原創) 我的Design Pattern之旅[4]:使用Generic改進Strategy Pattern (OO) (Design Pattern) (.NET) (C#)
- (原創) 我的Design Pattern之旅[8]:如何使用泛型打造動態改變的Strategy Pattern? (OO) (Design Pattern) (C/C++) (template) (boost)
- (原創) 其他領域也用Pattern觀念 (OO) (Design Pattern)
- (原創) 我的Design Pattern之旅[7]:使用泛型改進Adapter Pattern (OO) (Design Pattern) (C/C++) (template) (.NET) (C#) (C++/CLI) (VB)
- (原創) 我對interface的理解 (C/C++) (OO) (Design Pattern)
- (原創)『我的Design Pattern之旅』隨筆分類 (OO) (Design Pattern)
- (轉貼) PetShop4.0 工厂模式及Profile Provider实现 (.NET) (PetShop) (OO) (Design Pattern)
- (轉貼) 夢在天涯設計模式隨筆分類列表 (OO) (Design Pattern)
- (原創) 軟體為什麼那麼『複雜』? (OO)
- (原創) Iterative Development有哪些優點? (OO)
- (轉貼) 一個程式師的成長的六個階段 (OO) (Design Pattern)
- (原創) 由C語言學習Verilog的思維轉換 (C/C++) (C) (IC Design) (Verilog)
- (原創) 物件導向技術不只用在軟體開發而已,一樣也適用在系統晶片開發 (IC Design) (Verilog) (OO)