準備寫《設計模式(Java)》,歡迎拍磚

yqj2065發表於2013-02-21

在講授“資訊系統分析與設計”課程的時候,需要介紹一些設計模式;又由於在[程式設計導論]出版過程中,清華大學出版社的魏江江主任給我寄來了兩本設計模式方面的書籍,因而yqj2065決定將設計模式方面的知識全面梳理一番。


一旦以[程式設計導論]為思考平臺,重審[GoF]和其他設計模式的書籍時,我非常驚訝地發現,十年前我非常崇拜的[設計模式]顯得有些蒼老和不堪。這是一種奇怪的感受。
思路:
①推匯出常用的設計模式。
GoF在[設計模式•引言]中寫道:“這本書的目的就是將物件導向軟體的設計經驗作為設計模式記錄下來”。這種“記錄”或者說歸納,對於廣大程式設計師成功地共享設計經驗作出了重大貢獻。然而,將設計模式作為前輩的經驗總結或者既定事實,對於學習設計模式,特別是能夠靈活使用設計模式是一個錯誤的誘導。許多設計模式的學習者如同拿一本字典學習英語一樣。本書的基本方法是從各種假定出發,透過重構原始碼或者遵循設計原則的編寫原始碼,以獲得設計模式。
雖然有點像作弊——知道最終結果的推導和證明,然而在推導的過程中,我們能夠看到一個模式更多的變化、能夠知道一個模式的優缺點/適應性、能夠知道一個模式與其他模式的思路上的關聯(而不是UML類圖結構上的形似)。
②解釋更清晰和簡明。
這是站在巨人的肩膀上,對巨人的經典加以吹毛求疵。
以我對物件導向的認識,[設計模式]中有許多解釋顯得晦澀、不嚴密、甚至錯誤。一個典型的例子是[設計模式]使用回撥/好萊塢法則解釋模板方法模式(5.10),而在我看來,觀察者模式則是回撥/好萊塢法則的簡單推論。[設計模式]對橋接模式(4.2)的解說非常難解。再例如,我認為備忘錄模式(5.6)的技術要點是Memento物件必須是不變物件而與“封裝性”沒有太多的關係。
③補充常用的模式。如依賴注入等。
④...

草擬大綱如下:

第0章 引言 1
0.1
0.1.1何謂設計模式 1
0.1.2問題描述的形式 4
0.1.3本書的模板 5
0.2 物件導向程式設計正規化 5
0.2.1柏拉圖法則 6
0.2.2 Liskov原則 6
0.1.3 Parnas原則 6
0.3設計原則 6
0.3.1單向依賴原則 7
0.3.2抽象依賴原則 11
0.3.3最少依賴原則 17


第1章 建立型模式 19
1.1 new與反射 19
1.1.1 new表示式的侷限 20
1.1.2 Class.newInstance() 22
1.1.3 配置檔案 23
1.1.4 大變革 27
1.2依賴注入 29
1.2.1 注入的方式 30
1.2.2 IoC容器框架 31
1.2.3 更多… 36
1.3工廠模式 36
1.3.1簡單工廠模式 36
1.3.2工廠方法模式(3.3) 41
1.3.3抽象工廠模式(3.1) 44
1.4裝配廠模式 44
1.4.1偽建造者模式 45
1.4.2建造者模式(3.2) 48
1.4.3串接式setter模式 49
1.5原型模式(3.4) 55
1.5.1 結構分析 55
1.5.2 Java實現 56
1.5.3 深克隆 57
1.5.4案例 58
1.6零例、單例和物件池 59
1.6.1零例模式 59
1.6.2 單例模式(3.5) 60
1.6.3 多型的單例 62
1.6.4多例(Multiton)模式 68
1.6.5物件池 69
第2章 方法型模式 71
2.1空方法和Null物件 71
2.1.1空方法的作用 71
2.1.2 Null Object模式 72
2.2策略模式(5.9) 74
2.2.1封裝演算法 74
2.2.2方法物件化 76
2.2.3策略與多型 78
2.2.4小結 79
2.3模板方法模式(5.10)

2.4命令模式(5.2) 82
2.4.1乒乓球 82
2.4.2 雙分派 83
2.4.3命令與執行 86
2.4.4評價 88

2.5 回撥與觀察者模式(5.7) 89

第3章 屬性型模式 100
3.1虛域模式 100
3.1.1 案例 101
3.2享元模式(4.6) 101
3.2.1屬性物件+物件池 101
3.2.2物件池 102
3.3狀態模式(5.8) 102
3.3.1有限狀態機 103

第4章 委派型模式 104
4.1小方法模式 104
4.2代理模式(4.7) 105
4.2.1保護型代理(protection proxy) 106
4.2.2動態代理(dynamic proxy) 106
4.2.3 Java RMI (Remote Method Invocation,遠端方法呼叫) 106
4.3介面卡模式(4.1) 106
4.3.1 轉發的方式 107
4.3.2 介面卡的變種 108
4.4橋接模式(4.2) 108
4.4.1替代多繼承性 108
4.2.2橋接的作用 110
4.5裝飾模式(4.4) 111
4.6外觀模式(4.5) 111
4.7中介模式(5.5) 111

第5章 結構型模式 113
5.1責任鏈模式(5.1) 113
5.1.1經典責任鏈 113
5.2 組合模式(4.3) 114
5.2.1實現問題 114
5.3訪問者模式(5.11) 122
5.3迭代器模式 122

第6章 目標型模式 143
6.1備忘錄模式(5.6) 143
6.1.1 過程式實現 143
6.1.2 不變物件 144
6.2直譯器模式(5.3) 150
6.2.1乘法直譯器 150

第7章 回顧 178

附錄 182
附錄A 使用ArgoUML 182
附錄B 模式對映表 185
附錄C參考資料 186

相關文章