準備寫《設計模式(Java)》,歡迎拍磚
在講授“資訊系統分析與設計”課程的時候,需要介紹一些設計模式;又由於在[程式設計導論]出版過程中,清華大學出版社的魏江江主任給我寄來了兩本設計模式方面的書籍,因而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
相關文章
- 多層架構的討論,歡迎拍磚架構
- AdonisJs 中文社群預覽版正式上線,歡迎拍磚JS
- 釋出一個自認為安全的 webbook 自動部署流程 歡迎拍磚指正Web
- 擼了一個Golang的包管理/自動化構建工具,歡迎大家拍磚Golang
- 寫給準備跳槽的小夥伴們的設計模式——工廠方法設計模式設計模式
- 企業微信獲客準備,先設定打招呼歡迎語吧!
- 深受Java程式設計師歡迎的10款Java IDEJava程式設計師IDE
- 《Node.js設計模式》歡迎來到Node.js平臺Node.js設計模式
- java設計模式-備忘錄模式(Memento)Java設計模式
- 在中國,什麼樣的Java程式設計師最受歡迎Java程式設計師
- 在專案中使用設計模式的淺見,歡迎大家討論:)設計模式
- 折騰Java設計模式之備忘錄模式Java設計模式
- 19.java設計模式之備忘錄模式Java設計模式
- JAVA設計模式之 備忘錄模式【Memento Pattern】Java設計模式
- 為什麼Go語言設計受到歡迎?Go
- Java設計模式——模板設計模式Java設計模式
- 設計模式----備忘錄模式設計模式
- 設計模式 - 備忘錄模式設計模式
- Java現在還受歡迎嗎?Java
- JAVA準備Java
- 深入淺出Java設計之備忘錄模式Java模式
- 分享一下自己的簡歷, 拋磚引玉歡迎討論
- 為 Java 程式設計師準備的 Go 入門 PPTJava程式設計師Go
- go 寫了個部落格,歡迎圍觀Go
- 準備程式設計師面試?你需要了解這 14 種程式設計面試模式程式設計師面試模式
- 設計模式(十九):備忘錄模式設計模式
- 設計模式之備忘錄模式設計模式
- Oracle Audit 讀書筆記 --請拍磚Oracle筆記
- 【Java】設計模式Java設計模式
- Java 設計模式Java設計模式
- java設計模式Java設計模式
- Java——設計模式Java設計模式
- php設計模式備忘PHP設計模式
- Java設計模式——命令模式Java設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式:代理模式Java設計模式
- 全球最受歡迎的8位Java大牛Java