2007年6月14日星期四

Design Pattern

今日搵工時,發現有份工要識Design Pattern,於是搵下係咩黎
轉載自:http://www.oreilly.com.tw/column_sleepless.php?id=j008

什麼是 Design Pattern

所以,Pattern 就是一種「千錘百鍊」的智慧結晶。有經驗的專家和沒經驗的新手,差別就在於:有經驗的專家知道如何在適當的時機,套用某些公式(Pattern)以解決特定 的問題,這是專家經年累月所培養出來的 Know-How(請參見「軟體產業的知識經濟」一文)。

一般來說,物件導向軟體開發的程序可以粗略分成 OOA(物件導向分析)、OOD(物件導向設計)、OOP(物件導向實作)。在 OOD(Object-Oriented Design)階段所採用的 Pattern 就稱為 Design Pattern。運用良好的 Design Pattern,可以使得系統架構更優良(也更快完成),對於後續的 OOP、測試、維護,都會有很大的 幫助。Design Pattern 會告訴你,什麼情況下用 Delegation 而不要用繼承、什麼情況下用 Interface 而不要用 Class... 諸如此類的知識。這些都是軟體界前輩的智慧結晶。

我要強調 Design Pattern 專指 Design 時期的 Pattern。但是 Coding 時的 Pattern(例如程式碼內縮)最好不要稱為 Pattern,以免混淆。Coding 時期的 Pattern 最好稱為 Coding Style(或 Code Style)。

Design Pattern 這個名詞也可沿用到許多地方。我認為孫子兵法就是一本軍事領域 Design Pattern 的書,它告訴你什麼時候該採什麼樣的軍事動作。至於怎麼去砍人,則是屬於 implementation 的部分,不屬於孫子兵法的範圍。

什麼是 Anti-Pattern
並非所有的 Pattern 都是好的,不好的 Pattern 稱為 Anti-Pattern。如果你的系統中出現了 Anti-Pattern,就表示你犯了別人「常犯的典型錯誤」。簡言之,Anti-Pattern 就是錯誤的示範,要盡量避免。

讓 Design Pattern 成為你的不時之需
許多人在設計階段才來喟嘆:「 Pattern 到用時方恨少。」其實你可以避免這樣的情況。現在市面上有許多本 Design Pattern 和 Anti-Pattern 的書。只要好好把這些書讀過,體會每個 Pattern 的真正涵義,你可以在短短的時間內,功力激增一甲子。即使讀過的 Design Pattern,如果比較少用,一陣子之後也可能會忘記。 所以最好能隔一陣子就把 Design Pattern 的書拿出來複習。

沒有留言: