什麼是 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 就是錯誤的示範,要盡量避免。