深入淺出設計模式 (Head First Design Patterns)
內容描述
你不想重新發明輪子(或者更差的是,沒有充氣的輪子),所以你從設計模式中尋求協助-設計模式是過去人們面對軟體設計問題所學來的經驗。
有了設計模式,你就可以利用其他人經驗和實務的精華,省下的時間可以用在...其他的事情上,像是:更有挑戰性的事情、更複雜的事情、 更有趣的事情。
你想要學習:
事關緊要的模式
何時使用某個模式,為何使用該模式
如何在你自己的設計中馬上採用這些模式
何時不該使用模式(如何避免對模式過度狂熱)
某個模式是依據哪些OO設計守則而設計出來的
更重要的是,你想在學習設計模式的過程中,不會感覺到昏昏欲睡。
如果你曾經讀過任何一本一頭栽進系列書籍, 你就會知道你能夠從本書中得到的是:透過豐富的視覺效果讓你的大腦充分地運作。
本書的編寫運用許多最新的研究, 包括神經生物學、認知科學、以及學習理論,這使得這本書能夠將這些設計模式深深地烙印在你的腦海中,不容易被遺忘。
你將會更擅長於解決軟體設計的問題,並能夠和你的團隊成員用模式的術語來溝通。
目錄大綱
目錄
序
1 介紹模式設計
模擬鴨子
喬依想到繼承
利用介面如何?
軟體開發的一個不變真理
分開變動和不會變動的部分
設計鴨子的行為
測試鴨子的程式
動態地設定行為
行為封裝的大局觀
『有一個』可能比『是一個』更好
策略模式
共通模式詞彙的威力
我如何使用設計模式?
設計箱內的工具
習題解答
2 觀察者模式
氣象監測系統
認識觀察者模式
出版者 + 訂閱者 = 觀察者模式
五分鐘短劇:值得觀察的主題
定義觀察者模式
鬆綁的威力
設計氣象站
實踐氣象站
使用 Java 內建的觀察者模式
java.util.Observable 的黑暗面
設計箱內的工具
習題解答
3 裝飾者模式
歡迎來到星巴茲咖啡
開放關閉守則
認識裝飾者模式
以裝飾者建構飲料訂單
定義裝飾者模式
裝飾飲料
寫下星巴茲的程式碼
真實世界的裝飾者:Java I/O
設計自己的 Java I/O 裝飾者
設計箱內的工具
習題解答
4 工廠模式
當看到『new』,就要聯想到『具象』
物件村比薩
封裝建立物件的程式碼
建立一個簡單的比薩工廠
定義簡單工廠
給比薩店使用的框架
允許次類別做決定
讓我們開一家比薩店吧!
宣告一個工廠方法
會見工廠方法模式
平行的類別階層
定義工廠方法模式
一個很依賴的比薩店
看看物件的相依性
顛覆依賴守則
再回到比薩店...
原料家族
建立原料工廠
到底做了什麼事?(抽象工廠)
幕後花絮
定義抽象工廠模式
比較工廠方法以及抽象工廠
設計箱內的工具
習題解答
5 獨體模式
獨一無二
小小獨體
剖析經典的獨體模式設計
獨體的告解
巧克力工廠
定義獨體模式
Hershey(賓州廠),我們遇到麻煩了...
化身為 JVM
處理多執行緒
獨體的 Q&A
設計箱內的工具
習題解答
6 命令模式
巴斯特家電自動化公司
遙控器
看一下廠商的類別
同時,回到餐廳...
研究餐廳的互動過程
物件村餐廳的角色以及責任
從餐廳到命令模式
第一個命令物件
定義命令模式
命令模式與遙控器
實踐遙控器
逐步測試遙控器
寫文件的時刻到了
使用狀態實踐復原
每個遙控器都需具備集合形式!
使用巨集命令
命令模式的更多用途:佇列請求
命令模式的更多用途:日誌請求
設計箱內的工具
習題解答
7 轉接器模式與表象模式
我們周遭的轉接器
OO 轉接器
解釋轉接器模式
定義轉接器模式
物件和類別的轉接器
今晚的話題:物件轉接器以及類別轉接器
真實世界的轉接器
將列舉轉接到重複器
今晚的話題:裝飾者模式以及轉接器模式
甜蜜的家庭劇院
燈光,相機,表象!
建構家庭劇院表象
定義表象模式
「認識極少化」守則
設計箱內的工具
習題解答
8 樣板方法模式
急就章寫幾個咖啡和茶的類別
抽取咖啡和茶
更進一步的設計
將 prepareRecipe() 抽象化
我們做了什麼事?
認識樣板方法
走,泡茶去
樣板方法帶給我們什麼?
定義樣板方法模式
再靠近一點
對樣板方法進行掛鉤...
使用掛鉤
執行測試程式
好萊塢守則
好萊塢守則以及樣板方法
荒野中的樣板方法
用樣板方法排序
來排序鴨子吧
比較鴨子
觀察排序的內部運作
寫一個 Swing 的視窗程式
Applet
今晚的話題:樣板方法以及策略方法
設計箱內的工具
習題解答
9 反覆器與合成模式
物件村餐廳和煎餅屋合併
比較菜單的實踐方式
可以封裝重複的動作嗎?
認識反覆器模式
在餐廳菜單中加入一個反覆器
鳥瞰目前的設計
利用 java.util.Iterator 改寫程式
這為我們帶來什麼好處?
定義反覆器模式
單一責任
反覆器與聚合
Java 5 的反覆器以及聚合
正當我們認為這很安全的時候...
定義合成模式
利用合成設計菜單
實踐合成菜單
倒敘到反覆器
空反覆器
反覆器和合成湊在一起的魔力...
設計箱內的工具
習題解答
10 狀態模式
如何實踐狀態?(辦公室隔間對話)
狀態機的要點
狀態機程式碼第一版
該來的躲不掉...需求改變!
混亂的狀態...
定義狀態介面與類別
實踐我們的狀態類別
重新改造糖果機
定義狀態模式
狀態 vs 策略模式
狀態精神檢查
我們差點兒忘了!
設計箱內的工具
習題解答
11 代理人模式
監控糖果機
遠端代理人的角色
RMI 巡禮
糖果機遠端代理人
代理人幕後花絮
定義代理人模式
準備虛擬代理人
虛擬代理人設計 CD 封面程式
圖像代理人的幕後花絮
使用 Java API 的代理人
五分鐘短劇:保護主角
建立動態代理人
代理人動物園
設計箱內的工具
習題解答
12 複合模式
複合模式
鴨子重出江湖
加入一個轉接器
加入一個裝飾者
加入一個工廠
加入一個合成,一個反覆器
加入一個觀察者
模式總結
從鴨子的角度看類別圖
Model-View-Controller 之歌
設計模式是 MVC 的關鍵
戴上模式的有色眼鏡看 MVC
使用 MVC 控制節拍...
Model
View
Controller
探索策略模式
Model 的轉接
我們已經準備好進行心臟控制器
將 MVC 運用在 Web
設計模式與 Model
設計箱內的工具
習題解答
13 與設計模式相處
物件村指南
定義設計模式
更仔細地觀察設計模式的定義
願力量與你同在
模式型錄
發掘自己的模式
想當一個設計模式的作家嗎?
組織設計模式
用模式思考
在模式的心智
別忘了共通語彙的威力
共通語彙的五種方式
和四人幫一同巡迴物件村
你的旅途剛開始...
其他設計模式的資源
模式動物園
以反模式殲滅惡勢力
設計箱內的工具
離開物件村...
14 附錄:剩下的模式
橋樑模式
建立者模式
責任鏈模式
蠅量級模式
翻譯者模式
居間協調者模式
助記物模式
雛形模式
參觀者模式
索引
作者介紹
Eric Freeman以及Elisabeth Freeman是作家、講師、以及技術顧問。原本在迪士尼公司領導數位媒體以及網際網路的開發, 後來他們將這些經驗採用在他們自己的媒體中,包括這本書中。Eric具有耶魯大學的電腦科學博士學位,Elisbath具有耶魯大學 的電腦科學碩士學位。
Kathy Sierra(javaranch.com的創始者) 以及Bert Bates是暢銷的一頭栽進系列書籍的創立者,也是Sun公司Java開發者認証的規劃者。
「我昨天收到了這本書,然後就開始閱讀...我簡直欲罷不能。這簡直酷斃了!內容相當有趣,但是涵蓋層面很廣,而且切中要點,這本書讓我感到印象深刻。」
Erich Gamma
IBM頂級工程師、《Design Patterns》作者之一
「我覺得像是剛剛把一本數千鎊重的書高舉過頭頂。」
Ward Cunningham
Wiki發明者、Hillside Group創始人
「本書趨近完美,因為它在提供專業知識的同時,仍然具有相當高的可讀性。口吻權威、閱讀輕鬆。」
David Gelernter
耶魯大學資訊科學系教授
「這是我閱讀過最有趣且最聰明的軟體設計書籍。」
Aaron LaBerge
ESPN.com技術副主席