本書面向有一定Java語言基礎和一定編程經(jīng)驗的讀者,重點探討在Java程序設計中怎樣使用著名的23個設計模式。本書的目的是讓讀者不僅學習怎樣在軟件設計中使用好設計模式,更重要的是讓讀者通過學習使用設計模式深刻地理解面向對象的設計思想,以便更好地使用面向對象語言解決設計中的諸多問題。
本書可以作為計算機相關專業(yè)高年級學生以及研究生的教材,也可以作為軟件項目管理人員、軟件開發(fā)工程師等專業(yè)人員的參考用書,可登錄清華大學出版社網(wǎng)站(www.tup.tsinghua.edu.cn)下載書中的示例代碼。
前言
設計模式是從許多優(yōu)秀的軟件系統(tǒng)中總結出的成功的、可復用的設計方案,已經(jīng)被成功應用于許多系統(tǒng)的設計中。目前,面向對象程序設計已經(jīng)成為軟件設計開發(fā)領域的主流,而學習使用設計模式無疑非常有助于軟件開發(fā)人員使用面向對象語言開發(fā)出易維護、易擴展、易復用的代碼。本書面向有一定Java語言基礎和一定編程經(jīng)驗的讀者,重點探討在Java程序設計中怎樣使用著名的“23個設計模式”。本書的目的是讓讀者不僅學習怎樣在軟件設計過程中使用好設計模式,更重要的是讓讀者通過學習深刻地理解面向對象的設計思想,以便更好地使用面向對象語言解決設計中的諸多問題。
本書共27章,前3章為學習設計模式的一些必要知識,第4至第26章探討、講解“23個設計模式”,最后一章為模式分類。第1章簡單介紹模式的基本概念、起源以及學習設計模式的基本方法。第2章為面向對象的一些基本原則,了解這些基本原則,有助于理解后續(xù)章節(jié)中的模式。第3章簡單介紹了UML中的類圖。第4至第26章的每章都包含四部分重要的內(nèi)容,第一部分為一個概述,用易于理解的問題講解使用模式的動機;第二部分是模式的結構,在這部分用一個易于理解的示例講解模式的結構;第三部分闡述模式的優(yōu)點和使用場景;第四部分結合實際問題,使用設計模式給出一個有一定難度和實用價值的示例。
為了說明一個模式的核心實質(zhì),本書精心研究了針對每個模式的示例,以便讓讀者結合這樣的示例能更好地理解和使用模式。本書的全部示例由作者編寫完成,并在JDK 1.6環(huán)境下編譯通過。可登錄清華大學出版社網(wǎng)站(www.tup.tsinghua.edu.cn)下載書中的示例代碼,本書示例代碼及相關內(nèi)容僅供學習Java設計模式使用,不得以任何方式抄襲出版。
希望本書能對讀者學習和使用設計模式有所幫助,并請讀者批評指正。
編者2009年3月
目錄
第1章設計模式簡介
1.1什么是設計模式
1.2設計模式的起源
1.3“23個設計模式”的來源
1.4學習設計模式的重要性
1.5合理使用模式
1.6什么是框架
1.7使用Java描述模式的必要性
1.8設計模式資源
第2章面向對象的幾個基本原則
2.1面向抽象原則
2.2開閉原則
2.3多用組合少用繼承原則
2.4高內(nèi)聚低耦合原則
第3章UML類圖簡介
3.1類
3.2接口
3.3泛化關系
3.4關聯(lián)關系
3.5依賴關系
3.6實現(xiàn)關系
3.7注釋
第4章命令模式
4.1概述
4.2模式的結構與使用
4.3命令接口中的撤銷方法
4.4宏命令
4.5命令模式的優(yōu)點
4.6適合使用命令模式的情景
4.7命令模式與Java AWT事件
4.8應用舉例——模擬小電器
目錄
Java設計模式
第5章觀察者模式
5.1概述
5.2模式的結構與使用
5.3觀察者模式中的“推”數(shù)據(jù)與“拉”數(shù)據(jù)
5.4觀察者與多主題
5.5觀察者模式的優(yōu)點
5.6適合使用觀察者模式的情景
5.7Java API中的Observable類與Observer接口
5.8應用舉例——統(tǒng)計文本中的單詞和數(shù)字
第6章裝飾模式
6.1概述
6.2模式的結構與使用
6.3使用多個裝飾者
6.4裝飾模式相對繼承機制的優(yōu)勢
6.5裝飾模式的優(yōu)點
6.6適合使用裝飾模式的情景
6.7Java IO與裝飾模式
6.8應用舉例——讀取單詞表
第7章策略模式
7.1概述
7.2模式的結構與使用
7.3策略模式的優(yōu)點
7.4適合使用策略模式的情景
7.5策略模式相對繼承機制的優(yōu)勢
7.6應用舉例——加密、解密文件
第8章適配器模式
8.1概述
8.2模式的結構與使用
8.3適配器模式的優(yōu)點
8.4適合適配器模式的情景
8.5單接口適配器
8.6應用舉例——Iterator接口與Enumeration接口
第9章責任鏈模式
9.1概述
9.2模式的結構與使用
9.3責任鏈模式的優(yōu)點
9.4適合使用責任鏈模式的情景
9.5應用舉例——計算階乘
第10章外觀模式
10.1概述
10.2模式的結構與使用
10.3外觀模式的優(yōu)點
10.4適合使用外觀模式的情景
10.5應用舉例——解析文件
第11章迭代器模式
11.1概述
11.2模式的結構與使用
11.3迭代器的next()方法與集合的get(int index)方法
11.4迭代器模式的優(yōu)點
11.5適合使用迭代器模式的情景
11.6應用舉例——使用多個集合存儲對象
第12章中介者模式
12.1概述
12.2模式的結構與使用
12.3中介者模式的優(yōu)點
12.4適合使用中介者模式的情景
12.5使用中介者模式處理組件交互
12.6應用舉例——模擬交通信號燈
第13章工廠方法模式
13.1概述
13.2模式的結構與使用
13.3Java集合框架與工廠模式
13.4工廠方法模式的優(yōu)點
13.5適合使用工廠方法模式的情景
13.6應用舉例——創(chuàng)建藥品對象
第14章抽象工廠模式
14.1概述
14.2模式的結構與使用
14.3工廠方法模式的優(yōu)點
14.4適合使用抽象工廠模式的情景
14.5應用舉例——存款憑證
第15章生成器模式
15.1概述
15.2模式的結構與使用
15.3生成器模式的優(yōu)點
15.4適合使用生成器模式的情景
15.5應用舉例——日歷牌
第16章原型模式
16.1概述
16.2java.lang.Object類的clone方法
16.3Serializable接口與克隆對象
16.4模式的結構與使用
16.5原型模式的優(yōu)點
16.6適合原型模式的情景
16.7應用舉例——克隆容器
第17章單件模式
17.1概述
17.2模式的結構與使用
17.3單件模式的優(yōu)點
17.4適合單件模式的情景
17.5應用舉例——多線程爭冠軍
第18章組合模式
18.1概述
18.2模式的結構與使用
18.3組合模式的優(yōu)點
18.4適合組合模式的情景
18.5應用舉例——蘋果樹的重量及蘋果的價值
第19章橋接模式
19.1概述
19.2模式的結構與使用
19.3橋接模式的優(yōu)點
19.4適合橋接模式的情景
19.5應用舉例——制作電視節(jié)目
第20章狀態(tài)模式
20.1概述
20.2模式的結構與使用
20.3狀態(tài)切換
20.4共享狀態(tài)
20.5狀態(tài)模式的優(yōu)點
20.6適合狀態(tài)模式的情景
20.7應用舉例——模擬咖啡自動售貨機
第21章模板方法模式
21.1概述
21.2模式的結構與使用
21.3鉤子方法
21.4模板方法模式的優(yōu)點
21.5適合模板方法模式的情景
21.6應用舉例——數(shù)據(jù)庫的連接與記錄查詢
第22章代理模式
22.1概述
22.2模式的結構與使用
22.3遠程代理
22.4虛擬代理
22.5代理模式的優(yōu)點
22.6適合代理模式的情景
22.7應用舉例——使用遠程窗口閱讀文件
第23章享元模式
23.1概述
23.2模式的結構與使用
23.3享元模式的優(yōu)點
23.4適合享元模式的情景
23.5應用舉例——創(chuàng)建化合物
第24章訪問者模式
24.1概述
24.2模式的結構與使用
24.3雙重分派
24.4訪問者模式的優(yōu)點
24.5適合訪問模式的情景
24.6應用舉例——評價體檢表
第25章備忘錄模式
25.1概述
25.2模式的結構與使用
25.3使用內(nèi)部類創(chuàng)建備忘錄
25.4備忘錄模式的優(yōu)點
25.5適合使用備忘錄模式的情景
25.6應用舉例——使用備忘錄實現(xiàn)undo操作
第26章解釋器模式
26.1概述
26.2解釋器模式的結構與使用
26.3解釋器模式的優(yōu)點
26.4適合使用解釋器模式的情景
26.5應用舉例——簡單的英文翻譯器
第27章模式分類
27.1創(chuàng)建型模式
27.2行為型模式
27.3結構型模式
參考文獻