
軟件設(shè)計模式佳實戰(zhàn)培訓(xùn)
第一單元 優(yōu)秀系統(tǒng)與不佳系統(tǒng)的辨析——設(shè)計模式初探
內(nèi)容一:什么是優(yōu)秀的設(shè)計的設(shè)計
1. 什么是好的軟件設(shè)計和衡量的手段
2. 可擴展性(Extensibility)容易添加新的功能. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
3. 靈活性(Flexibility)代碼修改平穩(wěn)地發(fā)生. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
4. 可插入性(Pluggability)容易將一個類抽出去,同時將另一個有同樣接口的類加入進來. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
5. 如何寫出簡練,易于理解,模塊化,層次性,設(shè)計良好,高效,優(yōu)雅,并且清晰的系統(tǒng)。
6. 劣質(zhì)代碼有什么特征
7. 劣質(zhì)代碼的代價
8. 設(shè)計模式在構(gòu)建優(yōu)秀系統(tǒng)及避免不佳設(shè)計中的用途。
9. 分析真實項目,如何做的詳細設(shè)計,給我們哪些啟示,我們可以學(xué)習(xí)到什么
10. 分析我們在項目之中是那些原因?qū)е铝藳]有實現(xiàn)這些目標(biāo).
內(nèi)容二:案例 11. 某檔案移交接收系統(tǒng):紛繁復(fù)雜的嵌套判斷
12. 某多媒體制作軟件:上傳-下載模塊
13. 案例涉及,需要詳細學(xué)習(xí)如下設(shè)計模式及原則:
14. 簡單工廠、單例、策略模式
15. 重點:如何組織自己的代碼和模塊:指令與查詢分離原則。
16. 對有多年編程經(jīng)驗的人員,函數(shù)級的編碼是小兒科?
17. 分析模式使用前和后的對比
第二單元 設(shè)計模式與面向?qū)ο笤O(shè)計原則
內(nèi)容一:面向?qū)ο笤O(shè)計原則與設(shè)計模式關(guān)系
1. 軟件設(shè)計目標(biāo),基本原則和模式關(guān)系
2. 開閉原則
3. 依賴倒置原則
4. 單一職責(zé)原則
5. 里氏替換原則
6. 合成/聚合復(fù)用原則
7. 接口隔離原則和Demeter法則
8. 通過案例進行分析,模式如何使用
內(nèi)容二:案例分析—OO基本原則與設(shè)計模式
1. 通過經(jīng)典面向?qū)ο蟀咐?要求學(xué)員分別使用過程式和面向?qū)ο?br>
2種思維,進行設(shè)計
2. 進行對比2種思維的不同點和結(jié)果
3. 學(xué)員通過案例指出OO是否真正做到了它所說的價值
4. 這些小案例涉及項目開發(fā)中的常見的困境、疑惑,本節(jié)探討如何通過設(shè)計原則解決。
5. 討論設(shè)計原則與設(shè)計模式的關(guān)系,已經(jīng)在沒有合適模式可用的情況下如何分析、解決問題。涉及如下模式:
a) Fa?ade b) 觀察者模式與表驅(qū)動法
c) Bridge模式
d) Template Method模式
e) Strategy模式
第三單元 系統(tǒng)/模塊中的接口設(shè)計,及對外暴露服務(wù)技巧——組織接口型模式
內(nèi)容一:內(nèi)存接口及Web接口的設(shè)計及討論
1. 接口分離原則
2. 面向?qū)ο蟮囊c
3. 系統(tǒng)交互時,松散耦合的設(shè)計要點
4. 無狀態(tài)在接口設(shè)計中的重要性,及設(shè)計實踐
5. 接口的粒度
6. 接口調(diào)用次數(shù)與粒度的折中
7. 接口版本的設(shè)計
8. 新舊接口的兼容性設(shè)計技巧——只增不改、靈活參數(shù)等
內(nèi)容二:組織接口型模式
1. 適配器模式。Adapter a) 適配器模式介紹。
b) 容易被忽略的情況:關(guān)于接口的修改。
c) 適配器總結(jié)。 例:文件解析器系統(tǒng)的接口設(shè)計。
2. 外觀模式。
a) 令人望而生畏的API函數(shù)。
b) 外觀模式的作用。
c) 容易被忽略的外觀。
d) 外觀模式與適配器的辨析。 例:文件解析器系統(tǒng)的外觀設(shè)計。
3. 中介者模式
a) 中介者模式的使用場景。
b) 中介者模式在架構(gòu)中的重要地位。
c) 中介者模式與控制者。
第四單元 如何在系統(tǒng)及框架中創(chuàng)建并管理對象/
模塊? ——創(chuàng)建型模式
內(nèi)容一:對象及模塊創(chuàng)建的管理
1. 對象創(chuàng)建與IOC模式
2. 框架設(shè)計中的對象管理——SpringBean分析
3. 在分層架構(gòu)中,對象創(chuàng)建的要點
內(nèi)容二:創(chuàng)建型模式
1. 單例模式。
a) 單例模式的意義。
b) 多線程中的問題。
例:引入單例模式。
2. 工廠模式
a) 工廠模式的使用場景。
b) 工廠模式與反射。
例:引入工廠模式。
3. 抽象工廠模式
a) 創(chuàng)建不同對象的多個系列產(chǎn)品。
b) 工廠模式與抽象工廠模式的區(qū)別。
例:引入抽象工廠模式。
4. 構(gòu)造者模式
a) 構(gòu)造者模式的應(yīng)用場景。
b) 構(gòu)造者模式中的控制者。
5. 原型模式
a) 作為工廠的原型
b) 利用克隆進行原型
第五單元 如何設(shè)計出高可擴展性的系統(tǒng)!——擴展型模式
內(nèi)容一:如何應(yīng)對需求的變化 —— 打造高可擴展性的系統(tǒng)!
1. 從技術(shù)的角度,如何應(yīng)對需求的變化?
2. 高可擴展性系統(tǒng)的特點及達成方式的變遷
3. 框架設(shè)計的常用方法
4. 如何平衡精巧系統(tǒng)的設(shè)計和開發(fā)成本的投入?
5. 不要生硬地套用模式 —— 橋接模式的靈活使用
內(nèi)容二:擴展型模式
6. 功能與邏輯的關(guān)系
a) 功能模塊的設(shè)計要點。
b) 邏輯模塊的設(shè)計要點。
c) 系統(tǒng)穩(wěn)定及可擴展的秘訣。
7. 模板方法模式
a) 部分的多態(tài)。
b) 模板方法模式的使用場合。
c) 模板方法模式與IOC。
例:文件解析器中的模板方法模式。
8. 策略模式
a) 繼承與組合的辨析。
b) 多態(tài)的經(jīng)典使用。
c) 無處不在的策略模式。 例:運輸系統(tǒng);在多窗口系統(tǒng)中引入策略模式。
9. 橋接模式 a) 從“類爆炸”說起。
b) 復(fù)雜多對多的處理。
c) 僅針對接口編程是不夠的。
d) 橋接模式的要點:抽象類行為的具體實現(xiàn)中有重復(fù)的方法。
e) 從橋接模式到面向?qū)ο蟮恼`區(qū)。 例:在文件解析器中引入橋接模式。
10. 狀態(tài)模式
a) 狀態(tài)模式的本質(zhì):類狀態(tài)機。
b) 狀態(tài)模式的前提條件:經(jīng)常發(fā)生改變的是狀態(tài)(業(yè)務(wù)流程),而非對應(yīng)的處理。
c) 狀態(tài)模式使用。
d) 狀態(tài)模式與表驅(qū)動法。
e) 策略、橋接、狀態(tài)、模板方法模式的辨析。
11. 裝飾模式 a) 裝飾模式的使用場合。
b) 裝飾模式的要點。
c) Java中的裝飾模式。
例:裝飾模式在打印中的使用。
12. 代理模式 a) 代理模式的使用場合。
b) 代理模式的要點。
c) 代理模式與AOP
13. 訪問者模式
a) 訪問者模式的使用場合。
b) 雙重分發(fā)機制。
c) 與橋接模式的比較。
例:在演示控制系統(tǒng)中引入橋接模式。
14. 責(zé)任鏈模式
a) 責(zé)任鏈模式的使用場合。
b) 責(zé)任鏈模式的要點。
c) 消息路由與責(zé)任鏈模式。
15. 組合模式
a) 組合模式的使用場合。
b) 組合模式的使用要點。
c) 例:組合模式在表單統(tǒng)計中的使用。
第六單元 系統(tǒng)流程控制的設(shè)計——操作型模式
內(nèi)容一:系統(tǒng)中流程控制的設(shè)計
1. 類名暗含的意味
2. 臨時創(chuàng)建對象的用途
3. 工作流與命令模式
4. 消費者-生產(chǎn)者模式
5. 消息廣播的多種實現(xiàn)形態(tài)
內(nèi)容二:操作型模式
6. 命令模式
1) 命令模式的特點、優(yōu)點及缺點。
2) 命令模式的典型使用場合。 例:在客戶端與服務(wù)器端傳遞命令。 例:在元搜索系統(tǒng)中使用命令模式。
7. 觀察者模式
1) 觀察者模式的使用場景。
2) 觀察者模式與MVC。
3) 觀察者模式使用中變體。 例:用觀察者模式解決多窗口系統(tǒng)的聯(lián)動問題。
8. 享元模式
1) 享元模式的使用場景。
2) 內(nèi)存管理:存根(stub)與享元模式。
9. 備忘錄模式
1) 備忘錄的使用場景。
10. 迭代器模式
1) Java、stl、c#中的迭代器實例。
例:構(gòu)造統(tǒng)一的樹狀結(jié)構(gòu)迭代。
11. 解析器模式:
1) 解析器模式的使用場合。
第七單元 如何才能正確使用模式
內(nèi)容一:設(shè)計模式的精髓——封裝變化
1. 設(shè)計模式精髓—如何應(yīng)對變化
2. 封裝變化的原則——避免“散彈槍式的外科手術(shù)”
3. 如何抽取出系統(tǒng)中的變化點及不變點
4. 不同因素的隔離——保護變量原則
5. 設(shè)計模式中封裝變化的思想和具體手段探討
內(nèi)容二:模式案例–某訂單系統(tǒng)
1. 介紹項目需求情況,進行設(shè)計
2. 學(xué)習(xí)設(shè)計模式(Strategy / Abstrct Factory/ Template Method)
內(nèi)容三:模式案例–某數(shù)據(jù)展示系統(tǒng)
1. 項目子系統(tǒng)背景和需求
2. 系統(tǒng)的設(shè)計思考過程
3. 展示如何用模式,進行設(shè)計
4. 學(xué)習(xí)設(shè)計模式(Strategy /Command/Template Method/ NULL Objecct /Adapter/表驅(qū)動法/Singleton )
內(nèi)容四:模式案例–某數(shù)據(jù)分析系統(tǒng)
1. 項目子系統(tǒng)背景和需求
2. 系統(tǒng)的設(shè)計思考過程
3. 展示如何用模式,進行設(shè)計
4. 學(xué)習(xí)設(shè)計模式(Observer / Visitor/ Composite /Command/ Strategy /Adapter/Singleton )
第八單元 重構(gòu)到模式
內(nèi)容一:重構(gòu)到模式----錯了再改,事不過三
1. 設(shè)計壞味道概述
2. 重構(gòu)思想
3. 重構(gòu)到設(shè)計模式
4. 常見設(shè)計模式的重構(gòu)演化的過程
內(nèi)容二:案例- 網(wǎng)絡(luò)數(shù)據(jù)分析系統(tǒng)的設(shè)計
1. 介紹項目需求情況,進行設(shè)計
2. 通過重構(gòu)逐步實現(xiàn)設(shè)計模式
3. Framework 設(shè)計思想—好萊塢原則
4. 學(xué)習(xí)設(shè)計模式
5. Factory模式
6. Strategy模式
7. Decorator模式
8. Observer模式
9. 架構(gòu)模式-分層、管道過濾器模式
10. 架構(gòu)模式的重構(gòu)及演變,每步的依據(jù)及效果對比
11. 從結(jié)構(gòu)上考慮、從效率上考慮
第九單元 用模式去思考—對設(shè)計模式本質(zhì)的思索及探討
內(nèi)容一:模式案例- 數(shù)據(jù)文件處理系統(tǒng)
1. 項目背景介紹和前期規(guī)劃
2. 從初的需求進行分析,到系統(tǒng)的設(shè)計,后到編碼實現(xiàn)該案例,全程進行面向?qū)ο蟮姆治?建模,設(shè)計和終的開發(fā)實現(xiàn).
3. 學(xué)習(xí)IOC思想在框架設(shè)計中的重要作用
4. 在案例中自然使用模式,而非生搬硬套! (Fa?ade, Strategy、Template Method 、Mediator, Simple Factory Command,模式)
5. 案例采用逐步推演的方法,針對需求的不斷變化進行設(shè)計的演變。設(shè)計靈活的系統(tǒng)框架
6. 通過案例學(xué)習(xí)怎樣才能合適應(yīng)用模式
內(nèi)容二:設(shè)計模式的本質(zhì)探討
1. 指出什么是優(yōu)秀設(shè)計和丑陋設(shè)計
2. 總結(jié)自己的模式-神似而非型似
3. 探討相似模式的本質(zhì)
4. “間接類”模式的推演及演化
5. “流程類”模式的推演及演化
6. 避免模式的誤用,討論模式的陷阱:在看似典型的場景,但不宜使用模式的場合。
內(nèi)容三:案例- 元搜索系統(tǒng)分析及設(shè)計
1. 簡單背景介紹
2. 如何面對紛繁的變化因素的組合
3. 一定要使用模式嗎——如果能很好地能抽象、隔離不同因素,也許它就是模式。
4. 討論Command模式的本質(zhì)。
內(nèi)容四:案例- 電子文件生成
1. 簡單背景介紹
2. 使用模式的第一反應(yīng),及陷入陷阱的思索
3. 具體場景使用模式的本質(zhì)討論
4. 多態(tài)的本質(zhì)
5. 討論并介紹表驅(qū)動法
6. Template Method、DIP原則Strategy模式的的靈活使用——獲得優(yōu)雅的設(shè)計
第十單元 大型系統(tǒng)中的模式運用
內(nèi)容一:大型系統(tǒng)的及發(fā)展及核心技術(shù) ? 應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離 ? 使用緩存改善避免數(shù)據(jù)庫瓶頸 ?
應(yīng)用服務(wù)器集群和負載均衡避免運用服務(wù)器瓶頸 ? 數(shù)據(jù)庫讀寫分離 ?
用CDN及分布式文件系統(tǒng)加速系統(tǒng)響應(yīng) ? 分布式數(shù)據(jù)庫系統(tǒng)及NoSQL運用 ?
進行橫向的業(yè)務(wù)拆分 ? 分布式服務(wù),打造自己的軟件生態(tài)環(huán)境 內(nèi)容二:系統(tǒng)的負載均衡模式 ? HTTP 重定向負載均衡 ?
DNS 域名解析負載均衡 ? 反向代理負載均衡 ? IP(NAT) 負載均衡 ? 數(shù)據(jù)鏈路層負載均衡 ? 負載均衡算法-hash一致性算法
內(nèi)容三:系統(tǒng)的緩存模式 ? 客戶端緩存策略(瀏覽器緩存、本地Navtive代碼緩存) ? 代理服務(wù)器緩存 ? CDN緩存 ? 反向代理服務(wù)器緩存 ? Memcached 分布式緩存集群的訪問模型 ? Memcached 分布式緩存集群的伸縮性方案 ?
分布式緩存的一致性Hash 算法 典型案例分析:緩存策略如何應(yīng)用在自己的實際項目中
內(nèi)容四:分布式數(shù)據(jù)存儲策略 ? 分布式文件系統(tǒng) ? 數(shù)據(jù)存儲服務(wù)器集群 ? NoSQL 數(shù)據(jù)庫