商品簡介
《軟件秘笈:設計模式那點事》在第1章軟件設計模式概述後,從第2章到第24章詮釋23個軟件設計模式。每一種都以一個生活故事開始,然後是模式定義、模式分析、模式實現、設計原則和使用場合。模式實現通過Eclipse中的Java工程展開,采用軟件編程詮釋設計模式故事中的情節和操作,非常有趣。在這個基礎上,總結該軟件設計模式的設計原則,最後提出使用場合。第25章對各種軟件設計模式進行系統總結,第26章是各種軟件設計模式綜合應用。
名人推薦
《軟件秘笈:設計模式那點事》:23個有趣的故事、23個軟件模式、·有所思·有所想·有所悟、·打下理論根基·應用得心應手。
目次
1 設計模式概述
1.1 計算機軟件的發展現狀
1.2 引入設計模式的必要性
1.3 軟件設計遵循的基本原則
1.3.1 高內聚、低耦合
1.3.2 面向抽象編程
1.3.3 多用組合少用繼承
1.3.4 “開-閉”原則
1.4 設計模式概述
1.4.1 什么是設計模式
1.4.2 為什么需要設計模式
1.4.3 如何正確應用設計模式
1.5 設計模式的分類
1.5.1 創建型模式
1.5.2 結構型模式
1.5.3 行為型模式
1.6 學會歸納和總結
第一部分 創建型模式
2 曹操獻刀:工廠方法模式
2.1 三國故事之曹操獻刀
2.2 模式定義
2.3 故事中的模式分析
2.3.1 故事中的角色
2.3.2 抽象化分析方法
2.3.3 工廠方法模式的靜態建模
2.4 故事的工廠方法模式實現
2.4.1 建立產品
2.4.2 建立工廠
2.4.3 故事情節的歷史重現
2.4.4 用八星寶刀來考驗模式
2.5 設計原則
2.6 使用場合
2.7 本章要點
3 肯德基:抽象工廠模式
3.1 發生在肯德基的故事
3.2 模式定義
3.3 故事中的模式分析
3.3.1 故事中的角色
3.3.2 抽象化分析
3.3.3 抽象工廠模式的靜態建模
3.4 故事的抽象工廠模式實現
3.4.1 抽象食物的建立
3.4.2 建立不同食物的抽象基類
3.4.3 創建具體的食物
3.4.4 建立工廠
3.4.5 創建客戶類
3.4.6 故事情節的展現
3.5 設計原則
3.6 使用場合
3.7 本章要點
4 手機套餐:建造者模式
4.1 手機套餐
4.2 模式定義
4.3 故事中的模式分析
4.3.1 角色分析
4.3.2 建造者模式的靜態建模
4.4 模式實現
4.4.1 創建產品——手機套餐
4.4.2 建立抽象建造者
4.4.3 建立具體建造者
4.4.4 創建指導者
4.4.5 讓客戶訂購手機套餐
4.4.6 如何簡化建造者實現
4.5 設計原則
4.6 使用場合
4.7 本章要點
5 大學生初入社會:原型模式
5.1 大學生初入社會
5.2 模式定義
5.3 大學生故事的模式分析
5.3.1 故事情節分析
5.3.2 原型模式的靜態建模
5.4 大學生故事的原型模式實現
5.4.1 原型的建立
5.4.2 創建生成原型對象的工廠
5.4.3 大學生初入社會的生活展現
5.5 設計原則
5.6 使用場合
5.7 本章要點
6 課堂上互動:單例模式
6.1 課堂上發生的故事
6.2 模式定義
6.3 模式分析
6.4 模式實現
6.4.1 實現一:使用同步線程安全創建單例對象
6.4.2 實現二:創建一個類全局對象實例作為單例對象
6.4.3 提高:多例模式實現
6.5 設計原則
6.6 使用場合
6.7 本章要點
第二部分 結構型模式
7 電源轉換:適配器模式
7.1 生活中的適配器
7.2 模式定義
7.3 模式分析
7.3.1 適配器中的角色
7.3.2 靜態建模
7.4 模式實現
7.4.1 抽象電源建立
7.4.2 創建220V電源
7.4.3 創建12V電源
7.4.4 測試220V電源和12V電源
7.4.5 對象適配器實現
7.4.6 類適配器模式實現
7.5 設計原則
7.6 使用場合
7.7 本章要點
8 開關與電燈:橋接模式
8.1 開關與電燈
8.2 模式定義
8.3 一般化分析
8.4 一般化實現
8.4.1 建立抽象開關
8.4.2 電燈實現
8.4.3 客戶端測試
8.4.4 對于擴展功能的思考
8.5 橋接模式分析方法
8.6 開關與電燈的橋接模式實現
8.6.1 創建電燈接口
8.6.2 創建開關
8.6.3 電燈實現
8.6.4 客戶端測試
8.7 設計原則
8.8 使用場合
8.9 本章要點
9 公司層級結構:組合模式
9.1 公司層級結構
9.2 模式定義
9.3 一般化分析
9.4 一般化實現
9.4.1 創建普通員工
9.4.2 創建管理者
9.4.3 客戶端測試
9.4.4 系統結構的思考
9.5 組合模式分析方法
9.6 公司結構的組合模式實現
9.6.1 建立員工抽象
9.6.2 創建管理者
9.6.3 創建普通員工
9.6.4 客戶端測試
9.7 設計原則
9.8 使用場合
9.9 本章要點
10 染色饅頭:裝飾者模式
10.1 染色饅頭事件
10.2 模式定義
10.3 一般化分析
10.4 一般化實現
10.4.1 創建饅頭接口
10.4.2 正常饅頭
10.4.3 染色饅頭
10.4.4 甜饅頭
10.4.5 如何生產甜玉米饅頭
10.5 裝飾者模式分析方法
10.6 染色饅頭的裝飾者模式實現
10.6.1 創建抽象裝飾者
10.6.2 創建裝飾者
10.6.3 生產甜玉米饅頭
10.7 設計原則
10.8 使用場合
10.9 本章要點
11 美食天下:外觀模式
11.1 美食天下
11.2 模式定義
11.3 一般化分析
11.4 一般化實現
11.4.1 創建糖醋排骨接口
11.4.2 糖醋排骨實現
11.4.3 客戶端測試
11.5 外觀模式分析方法
11.5.1 讓廚師為我們做菜
11.5.2 外觀模式的靜態建模
11.6 糖醋排骨的外觀模式實現
11.6.1 建立外觀門面
11.6.2 客戶端測試
11.7 設計原則
11.8 使用場合
11.9 本章要點
12 五子棋游戲:享元模式
12.1 五子棋游戲
12.2 模式定義
12.3 模式分析
12.3.1 五子棋游戲分析
12.3.2 靜態建模
12.4 模式實現
12.4.1 創建抽象棋子
12.4.2 棋子實現
12.4.3 創建棋子工廠
12.4.4 客戶端測試
12.4.5 如何實現棋子的位置
12.4.6 測試棋子的外蘊狀態
12.5 設計原則
12.6 使用場合
12.7 本章要點
13 紅酒經銷:代理模式
13.1 紅酒代理商
13.2 模式定義
13.3 模式分析
13.3.1 消費者購買行為分析
13.3.2 靜態建模
13.4 模式實現
13.4.1 創建紅酒生產廠商
13.4.2 到紅酒工廠購買紅酒
13.4.3 創建紅酒代理商
13.4.4 到紅酒代理商處購買紅酒
13.5 設計原則
13.6 使用場合
13.7 本章要點
第三部分 行為型模式
14 學生生病了:責任鏈模式
14.1 學生生病了
14.2 模式定義
14.3 普通抽象化分析
14.3.1 學生請假流程分析
14.3.2 抽象化靜態建模
14.4 普通抽象化實現
14.4.1 學生請假實現
14.4.2 創建抽象請假消息處理者
14.4.3 請假處理者具體實現
14.4.4 客戶端測試
14.4.5 如何面對變化
14.4.6 使用外觀封裝變化部分
14.5 責任鏈模式分析方法
14.5.1 如何實現消息傳遞
14.5.2 責任鏈模式靜態建模
14.6 請假流程的責任鏈模式實現
14.6.1 抽象化修改
14.6.2 完善具體消息處理者
14.6.3 在外觀中設置消息處理責任鏈
14.6.4 客戶端測試
14.7 設計原則
14.8 使用場合
14.9 本章要點
15 郵局:命令模式
15.1 生活中的郵局
15.2 模式定義
15.3 模式分析
15.3.1 郵局例子分析
15.3.2 靜態建模
15.4 模式實現
15.4.1 創建消息接收者
15.4.2 創建中間角色郵局
15.4.3 創建消息發送者
15.4.4 讓郵局開始工作
15.4.5 優化我們的設計
15.5 設計原則
15.6 使用場合
15.7 本章要點
16 創建自己的語言:解釋器模式
16.1 創建自己的語言解釋器
16.2 模式定義
16.3 模式分析
16.3.1 “myida”語言分析
16.3.2 “myida”語言解釋器原理
16.4 模式實現
16.4.1 創建上下文環境
16.4.2 創建解析表達式
16.4.3 讓“myida”語言解釋器開始工作
16.5 設計原則
16.6 使用場合
16.7 本章要點
17 循環遍歷:迭代器模式
17.1 讓迭代器代替for循環
17.2 模式定義
17.3 模式分析
17.3.1 如何遍歷集合對象
17.3.2 迭代器模式靜態建模
17.4 模式實現
17.4.1 人員信息實現
17.4.2 人員集合實現
17.4.3 迭代器實現
17.4.4 讓迭代器遍歷集合對象
17.4.5 迭代器如何面對變化
17.4.6 客戶端發生哪些變化
17.5 設計原則
17.6 使用場合
17.7 本章要點
18 多人聊天室:中介者模式
18.1 多人聊天室
18.2 模式定義
18.3 模式分析
18.3.1 多人聊天室結構分析
18.3.2 靜態建模
18.4 模式實現
18.4.1 創建用戶接口
18.4.2 創建中介者
18.4.3 創建用戶
18.4.4 運行多人聊天室
18.5 設計原則
18.6 使用場合
18.7 本章要點
19 過關類游戲:備忘錄模式
19.1 過關類游戲
19.2 模式定義
19.3 模式分析
19.3.1 備忘錄模式特點
19.3.2 備忘錄模式靜態建模
19.4 模式實現
19.4.1 白箱備忘錄模式實現
19.4.2 黑箱備忘錄模式實現
19.5 設計原則
19.6 使用場合
19.7 本章要點
20 高溫預警:觀察者模式
20.1 高溫預警系統
20.2 模式定義
20.3 模式分析
20.3.1 高溫預警過程分析
20.3.2 靜態建模
20.4 模式實現
20.4.1 創建抽象角色
20.4.2 具體主題實現
20.4.3 具體觀察者實現
20.4.4 讓系統開始運行
20.5 設計原則
20.6 使用場合
20.7 本章要點
21 文檔編輯模式切換:狀態模式
21.1 文檔編輯器中的模式切換
21.2 模式定義
21.3 模式分析
21.4 模式實現
21.4.1 創建空白的上下文環境
21.4.2 創建狀態接口
21.4.3 完善上下文內容
21.4.4 創建具體狀態
21.4.5 客戶端測試
21.5 設計原則
21.6 使用場合
21.7 本章要點
22 商場促銷:策略模式
22.1 商場促銷商品
22.2 模式定義
22.3 模式分析
22.3.1 商品促銷中的策略分析
22.3.2 策略模式靜態建模
22.4 模式實現
22.4.1 創建策略接口
22.4.2 創建具體策略
22.4.3 創建上下文環境
22.4.4 消費者購物消費
22.4.5 策略模式與條件判斷的比較
22.5 設計原則
22.6 使用場合
22.7 本章要點
23 生活行為:模板方法模式
23.1 每日的生活行為
23.2 模式定義
23.3 模式分析
23.3.1 生活行為分析
23.3.2 靜態建模
23.4 模式實現
23.4.1 建立算法骨架
23.4.2 創建具體實現
23.4.3 客戶端測試
23.5 設計原則
23.6 使用場合
23.7 本章要點
24 公司層級結構:訪問者模式
24.1 公司層級結構
24.2 模式定義
24.3 模式分析
24.3.1 組合模式回顧
24.3.2 訪問者模式分析
24.3.3 訪問者模式靜態建模
24.4 模式實現
24.4.1 員工實現
24.4.2 訪問者實現
24.4.3 讓員工接收訪問者
24.4.4 客戶端測試
24.4.5 擴展的思考
24.5 設計原則
24.6 使用場合
24.7 本章要點
25 設計模式總結
25.1 為什么學習設計模式
25.1.1 讓工作變得輕松
25.1.2 讓程序變得優雅
25.1.3 要學會設計原則
25.2 設計模式六大原則
25.2.1 “開-閉”原則(OCP)
25.2.2 單一職責原則(SRP)
25.2.3 依賴倒置原則(DIP)
25.2.4 接口隔離原則(ISP)
25.2.5 里氏替換原則(LSP)
25.2.6 迪米特法則(LoD)
25.3 勤于思考,善于總結
25.3.1 專心、用心、信心
25.3.2 做一個有思想的人
25.4 實踐出真知
26 MVC設計實踐
26.1 讓你的思維活躍起來
26.2 如何設計MVC架構
26.3 第一個MVC框架——Joker MVC
26.3.1 環境介紹
26.3.2 MVC起航
26.3.3 Joker MVC架構分析
26.3.4 Joker MVC架構實現
26.3.5 發布joker-1.0部署測試
書摘/試閱
就國內的計算機軟件狀況來看,軟件行業已經得到蓬勃發展,取得了令人矚目的成績,政府部門也是大力扶持本地軟件企業,為軟件行業的發展提供更多優惠政策,讓軟件企業獲得良好的發展空間。自從計算機軟件技術興起以來,從一兩個人的團隊發展成為擁有幾千人的知名企業在國內并不少見,國內軟件行業的興盛是顯而易見的。計算機軟件作為一門學科,從其誕生到現在不過短短的半個世紀,隨著技術的不斷創新,已經慢慢融入我們的日常生活中。如今移動互聯網的發展更是為計算機軟件行業帶來發展的又一次絕佳機遇,在其他很多高科技領域中,也都要依附于計算機軟件技術的支撐。因此,計算機軟件行業的前景在眾多行業中還是比較有優勢的,無論現在還是將來。
然而,隨著計算機軟件的不斷發展,更多的資源都在向其靠攏,泡沫也勢必會逐漸形成,計算機軟件的泛濫也應當引起我們的注意。如何不被社會所淘汰,讓自己或者企業處于不敗的地位?這就需要掌握獨門絕技,打好穩固的根基。
1.2引入設計模式的必要性
“物以稀為貴”,這是一句至理名言。越是稀有的東西,它的價值就會越高;同樣的東西變得多了,其自身價值就會貶值。在計算機軟件行業長足發展的今天,越來越多的軟件企業出現在我們面前,軟件行業的從業人員也變得越來越復雜,有的是計算機專業,也有的是轉行過來的。計算機軟件技術再也不是那種高深莫測的未知領域,已經開始向大眾化普及,各種從業人員的專業素養良莠不齊,計算機軟件的質量更是難以得到保證。因此,引入軟件設計模式將成為企業或者個人可持續發展的必然選擇。只有專業,才能在這個領域做得最好,為社會、企業和個人帶來更多的價值。
讀本書的人一般是已經從事了一定軟件開發工作的人員,設計模式就是當你在實踐當中遇到問題但又不知如何解決時想得到的解決方式。