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