編輯推薦
《模式:工程化實現及擴展(設計模式C#版)》第一部分除瞭介紹麵嚮對象設計原則外,還充實瞭一些C#語言的介紹,但這些內容並不是枯燥的講解,讀者可以在閱讀中通過一係列動手練習盡快吸收這些理論並將它們內化為自己的技能。《模式:工程化實現及擴展(設計模式C#版)》最後一部分的“GOF綜閤練習”把各種設計模式做瞭一次集中展示,目的是讓讀者把分散的模式知識融閤在一起,能夠將書本知識真正用於改善一個“準”生産型模塊的實現。
內容簡介
設計模式不是一門適閤空談的技術,它來自於開發人員的工程實踐又服務於工程實踐。
《模式:工程化實現及擴展(設計模式C#版)》並不是一本麵嚮入門者的讀物,因為它需要結閤工程實踐介紹如何發現模式靈感、如何應用模式技術。不過作為一本介紹設計模式的書,它並不需要讀者對於龐大的.NET Framework有深入瞭解,因為擴展主要是結閤C#語法完成的,配閤書中的實例,相信讀者不僅能夠熟練應用設計模式技術,也能令自己的C#語言上一個颱階。
為瞭降低學習門檻,本書第一部分除瞭介紹麵嚮對象設計原則外,還充實瞭一些C#語言的介紹,但這些內容並不是枯燥的講解,讀者可以在閱讀中通過一係列動手練習盡快吸收這些理論並將它們內化為自己的技能。本書最後一部分的“GOF綜閤練習”把各種設計模式做瞭一次集中展示,目的是讓讀者把分散的模式知識融閤在一起,能夠將書本知識真正用於改善一個“準”生産型模塊的實現。
作者簡介
王翔,軟件架構師,主要從事.NET、XML、公鑰基礎設施的開發。專注於數據(尤其是XML信息)的生産、加工、交換、提煉等過程。最近參與瞭一係列有關應用密碼技術和PKI環境保護信息係統數據安全的項目。最喜歡數學,平常案頭總是擺一本數學練習題。閑暇時間喜歡寫作,通過發錶多種技術文章與國內外同行交流各種數據應用經驗。項目間隙經常到各海濱城市徒步旅行、野外露營、齣海航行、極限運動,這幾年烹飪也漸漸成為個人主要愛好。
目錄
第一篇 預備知識——發掘C#語言的麵嚮對象設計潛力
第1章 麵嚮對象設計原則
1.1 說明
1.2 單一職責原則(SRP)
1.3 裏氏替換原則(LSP)和依賴倒置原則(DIP)
1.4 接口隔離原則(ISP)
1.5 迪米特法則(LoD:Law of Demeter、LKP)
1.6 開閉原則(OCP)
1.7 小結
1.8 自我檢驗
第2章 重新研讀C#語言
2.1 說明
2.2 C# 部分語法內容擴展
2.2.1 命名空間(Namespace)
2.2.2 簡潔的異步調用機製——委托(Delegate)和事件(Event)
2.2.3 考驗算法的抽象能力——泛型(Generics)
2.2.4 用貼“標簽”的方式擴展對象特性
2.2.5 可重載運算符(Overloadable Operators)與
轉換運算符(Conversion Operators)
2.3 麵嚮插件架構的配置係統設計
2.3.1 認識.NET Framework提供的主要配置實體類
2.3.2 小結
2.3.3 自我檢驗
2.4 依賴注入
2.4.1 背景介紹
2.4.2 示例情景
2.4.3 構造注入(Constructor)
2.4.4 設值注入(Setter)
2.4.5 接口注入
2.4.6 基於屬性的注入方式(Attributer)
2.4.7 小結
2.4.8 自我檢驗
2.5 連貫接口(Fluent Interface)
第3章 Java和C#
3.1 說明
3.2 枚舉(Enum)
3.3 泛型(Generics)
3.4 屬性和標注(Attribute and Annotation)
3.5 操作符重載和類型轉換重載
3.6 委托、事件、匿名方法
3.7 Lamada和LINQ
3.8 小結
第二篇 創建型模式——管理對象實例的構造過程
第4章 工廠&工廠方法模式
4.1 說明
4.2 簡單工廠
4.2.1 最簡單的工廠類
4.2.2 簡單工廠的局限性
4.3 經典迴顧
4.4 解耦工廠類型與客戶程序
4.5 基於配置文件的工廠
4.5.1 基於配置文件解耦工廠接口和具體工廠類型
4.5.2 基於配置文件解耦工廠類型和具體工作産品
4.6 典型工程化實現
4.7 小結
4.8 自我檢驗
第5章 單件模式
5.1 說明
5.2 經典迴顧
5.3 綫程安全的單件模式
5.4 細節決定成敗
5.5 細顆粒度的單件模式
5.5.1 背景討論
5.5.2 解決桌麵應用中細顆粒度單件模式問題
5.5.3 解決Web應用中細顆粒度單件模式問題
5.6 分布式環境下的單件模式
5.7 單件模式的使用問題
5.8 小結
第6章 抽象工廠模式
6.1 說明
6.2 經典迴顧
6.3 解決經典模式的硬傷
6.4 基於委托的生産外包
6.5 小結
第7章 創建者模式
7.1 說明
7.2 經典迴顧
7.3 為Builder打個標簽
7.4 具有裝配/卸載能力的Builder
7.5 連貫接口形式的Builder
7.6 小結
7.7 自我檢驗
第8章 原型模式
8.1 說明
8.2 經典迴顧
8.3 錶麵模仿還是深入模仿
8.3.1 概念
8.3.2 製作實現剋隆的工具類型
8.3.3 簡單自定義復製過程
8.3.4 細顆粒度自定義復製過程
8.4 小結
8.5 自我檢驗
第三篇 結構型模式——組織靈活的對象體係
第9章 適配器模式
9.1 說明
9.2 經典迴顧
9.3 類型轉換符實現適配
9.4 組適配器
9.5 用配置約定適配過程
9.6 麵嚮數據的適配機製
9.7 小結
9.8 自我檢驗
第10章 橋模式
10.1 說明
10.2 經典迴顧
10.3 分解復雜性的多級橋關係
10.4 看著“圖紙”造橋
10.5 具有約束關係的橋
10.6 小結
10.7 自我檢驗
第11章 組閤模式
11.1 說明
11.2 經典迴顧
11.3 用迭代器遍曆組閤類型
11.4 適於XML信息的組閤模式
11.5 分布式“部分—整體”環境
11.6 小結
11.7 自我檢驗
第12章 裝飾模式
12.1 說明
12.2 經典迴顧
12.3 卸載裝飾
12.4 通過配置和創建者完成裝飾過程
12.5 把裝飾類型做成標簽
12.5.1 更“徹底”的屬性注入
12.5.2 方式1:采用.NET平颱自帶的AOP機製實現
12.5.3 自定義代理攔截框架方式
12.5.4 進一步分析
12.6 小結
第13章 外觀模式
13.1 說明
13.2 經典迴顧
13.3 平颱、開發語言無關的抽象Facade接口——WSDL
13.4 小結
第14章 享元模式
14.1 說明
14.2 經典迴顧
14.3 製訂共享計劃
14.4 通過委托和隊列實現異步享元
14.5 小結
第15章 代理模式
15.1 說明
15.2 經典迴顧
15.3 遠程代理
15.4 小結
第四篇 行為型模式——算法、控製流的對象化操作
第16章 職責鏈模式
16.1 說明
16.2 經典迴顧
16.3 非鏈錶方式定義職責鏈
16.4 小結
第17章 模闆方法模式
17.1 說明
17.2 經典迴顧
17.3 方法的模闆——委托
17.4 類和接口的模闆——泛型
17.5 係統架構的模闆——配置
17.6 小結
17.7 自我檢驗
第18章 解釋器模式
18.1 說明
18.2 經典迴顧
18.3 采用正則錶達式
18.4 采用字典 5
18.5 多級解釋器係統
18.6 用XSD解釋自定義業務語言
18.7 小結
18.8 自我檢驗
第19章 命令模式
19.1 說明
19.2 經典迴顧
19.3 打包命令對象
19.4 異步命令操作
19.5 命令操作隊列
19.6 小結
19.7 自我檢驗
第20章 迭代器模式
20.1 說明
20.2 經典迴顧
20.3 .NET內置的迭代器
20.4 小結
20.5 自我檢驗
第21章 中介者模式
21.1 說明
21.2 經典迴顧
21.3 基於委托和事件的鬆耦閤中介者
21.4 根據配置動態協調通知關係
21.5 小結
21.6 自我檢驗
第22章 備忘錄模式
22.1 說明
22.2 經典迴顧
22.3 把備忘壓棧
22.4 備忘錄的序列化和持久化
22.4 小結
22.5 自我檢驗
第23章 觀察者模式
23.1 說明
23.2 經典迴顧
23.3 .NET內置的觀察者機製——事件
23.4 具有觀察者機製的集閤類型
23.5 麵嚮服務接口的觀察者
23.6 小結
23.7 自我檢驗
第24章 狀態模式
24.1 說明
24.2 經典迴顧
24.3 狀態的序列化和持久化
24.4 主動狀態對象
24.5 用WF完成更易於編排的狀態模式
24.6 小結
24.7 自我檢驗
第25章 策略模式
25.1 說明
25.2 經典迴顧
25.3 策略模式與解釋器模式的協作
25.4 .NET自帶的策略接口
25.5 小結
第26章 訪問者模式
26.1 說明
26.2 經典迴顧
26.3 藉助反射或Dynamic實現訪問者
26.4 用委托實現工程化的訪問者
26.5 小結
26.6 自我檢驗
第五篇 GOF綜閤練習
第27章 GOF部分階段實踐
27.1 迴顧GOF
27.2 需求的提齣
27.3 第一輪技術分析
27.4 第二輪技術分析
27.5 第三輪技術分析
27.6 示例實現
27.7 驗證邏輯的有效性
27.8 小結
27.9 後記
附錄 Java和C#關鍵字對照錶
前言/序言
第一篇 預備知識―發掘C#語言的麵嚮對象設計潛力
第1章 麵嚮對象設計原則
1.1 說明
1.2 單一職責原則(SRP)
1.3 裏氏替換原則(LSP)和依賴倒置原則(DIP)
1.4 接口隔離原則(ISP)
1.5 迪米特法則(Lo D :Law of Demeter、LKP)
1.6 開閉原則(OCP)
1.7 小結
1.8 自我檢驗
1.1 說明
在介紹模式內容之前,我們先談一些有關麵嚮對象的話題。
《模式—工程化實現及擴展》係列的各個分冊,無論是設計模式還是架構模式,前麵其實都應該加上“麵嚮對象的”,即我們談論的是麵嚮對象的設計模式和麵嚮對象的架構模式。
同其他軟件領域一樣,麵嚮對象技術同樣有一些傳承下來的設計原則,它們是眾多麵嚮對象先驅們不斷提煉總結齣來的,這些原則甚至可以被稱為是“規律性”的,因為隨著項目規模的擴大,我們會不斷體會到這些原則的重要性。對於開發人員來說,這些原則的重要性是在一遍遍“撞南牆”的過程中體會到的,是不斷“費力”、“重寫”之後慢慢體會到的。
這些原則同樣體現在各類設計模式、架構模式之中,在學習過程中我們會通過類圖、時序圖、示例代碼等形式不斷體會這些原則解決“依賴”和“變化”的效果。當然,這些“原則”也在變化,不斷有新的“原則”加入,也有在“大浪淘沙”中淘汰掉的,真正沉澱下來的通用“原則”其實並不多。總體來說,麵嚮對象的典型原則可以劃分為兩類—“麵嚮類”的和“麵嚮包”的。
《模式:工程化實現及擴展(設計模式C版)》書籍簡介 這是一本深度剖析設計模式在 C 工程化應用的書籍,它不僅僅是理論的堆砌,更是將抽象的設計原則轉化為具體、可落地、可維護的代碼實踐。本書旨在幫助開發者 在實際項目開發中, 有效 地 運用設計模式, 提升 代碼的 可讀性、 可擴展性、 可重用性 和 可維護性, 從而 構建更健壯、更靈活的軟件係統。 本書內容 聚焦 於 如何將設計模式 從 概念 層麵 轉化為 實際的 C 代碼實現。 我們 深入 探討 每一個 核心設計模式的 起源、 解決的問題、 應用場景, 以及 如何在 C 語言的特性下進行最優的 工程化 落地。 不同於 市麵上 許多 僅停留在 簡單示例 講解的 書籍, 本書 強調 “工程化” 的 維度, 意味著 我們 會 關注 模式在 大型項目、 團隊協作、 長期演進 中的 實際 價值和 注意事項。 我們 將 首先 從 設計模式的 基石 —— SOLID 原則 開始, 係統地 梳理 其 內涵 和 在 C 中的 具體體現。 理解 SOLID 原則 是 掌握 設計模式的 關鍵, 因為 幾乎 所有 優秀的設計模式 都 是 SOLID 原則 的 具象化 實踐。 我們將 通過 大量的 代碼示例, 展示 如何 在 C 中 踐行 單一職責、 開放封閉、 裏氏替換、 接口隔離 和 依賴倒置 原則, 並 以此為 基礎, 為 後續 的 模式學習 打下 堅實 的 基礎。 隨後, 本書 將 係統性地 介紹 創建型模式(Creational Patterns)。 我們 會 深入 講解 單例模式(Singleton)、 工廠方法模式(Factory Method)、 抽象工廠模式(Abstract Factory)、 建造者模式(Builder) 和 原型模式(Prototype)。 對於 每一種 模式, 我們 都 將 詳細 闡述 其 設計思路, 分析 它 如何 解決瞭 對象的 創建 過程中的 復雜性 和 耦閤性。 在 C 的 語境下, 我們會 探討 如何在 多綫程環境 下 實現 綫程安全的 單例; 如何 利用 泛型 和 接口 構建 靈活的 工廠; 如何 通過 建造者模式 分離 對象的 構建 過程 和 其 錶示; 以及 如何 利用 原型模式 實現 高效的 對象復製。 本書 特彆 注重 這些 模式的 工程化 考量, 例如 單例的 懶加載 和 初始化時機, 工廠模式 的 命名規範 和 可維護性, 以及 建造者模式 在 復雜對象 配置 場景下的 應用。 接著, 我們將 進入 結構型模式(Structural Patterns) 的學習。 我們會 詳細 解析 適配器模式(Adapter)、 橋接模式(Bridge)、 組閤模式(Composite)、 裝飾器模式(Decorator)、 外觀模式(Facade)、 享元模式(Flyweight) 和 代理模式(Proxy)。 這些 模式 主要 關注 對象的 組閤 和 協作, 以 實現 更 好的 靈活性 和 復用性。 在 C 中, 我們 會 探討 如何 使用 適配器模式 連接 不兼容的 接口; 如何 運用 橋接模式 將 抽象 和 實現 分離; 如何 通過 組閤模式 處理 樹形結構 的數據; 如何 利用 裝飾器模式 動態 地 給 對象 添加 新的 職責; 如何 通過 外觀模式 簡化 復雜的 子係統; 如何 運用 享元模式 減少 對象的 創建 數量, 提高 內存利用率; 以及 如何 通過 代理模式 控製 對 其他 對象的 訪問。 本書 會 在 這些 模式的 應用中, 強調 C 的 特性, 如 擴展方法、 委托 和 LINQ 如何 為 模式的 實現 帶來 更 簡潔 和 優雅 的 方式。 之後, 我們將 深入 行為型模式(Behavioral Patterns)。 這部分 內容 包括 責任鏈模式(Chain of Responsibility)、 命令模式(Command)、 解釋器模式(Interpreter)、 迭代器模式(Iterator)、 中介者模式(Mediator)、 備忘錄模式(Memento)、 觀察者模式(Observer)、 狀態模式(State)、 策略模式(Strategy)、 模闆方法模式(Template Method) 和 訪問者模式(Visitor)。 行為型模式 關注 對象之間的 算法 和 職責的 劃分。 我們 會 詳細 講解 每一種 模式的 工作原理, 以及 在 C 中 如何 將其 應用於 實際場景。 例如, 如何 利用 責任鏈模式 實現 事件處理 的 分發; 如何 通過 命令模式 封裝 操作 並 支持 撤銷 和 重做; 如何 運用 迭代器模式 遍曆 各種 集閤; 如何 通過 中介者模式 降低 對象間的 直接耦閤; 如何 利用 備忘錄模式 保存 對象的 內部狀態; 如何 通過 觀察者模式 實現 對象間的 一對多 依賴關係; 如何 運用 狀態模式 使 對象 在其 內部狀態 改變時 改變 其 行為; 如何 通過 策略模式 封裝 可互換的 算法; 如何 運用 模闆方法模式 定義 算法的 骨架 並 允許 子類 重定義 某些 步驟; 以及 如何 通過 訪問者模式 在 不修改 對象 結構 的前提下 增加 新的 操作。 在 C 的 實現 中, 我們將 特彆 關注 委托、 事件、 泛型 和 匿名方法 等 語言特性 如何 使 這些 模式的 代碼 更加 簡潔 和 高效。 本書的 核心 競爭力 在於其 “工程化實現及擴展” 的 定位。 我們 不僅 會 提供 模式的 標準實現, 更會 深入 探討 以下 關鍵的 工程化 議題: 模式的選擇與權衡: 並非所有場景都適閤應用某個模式,本書將指導讀者如何在項目需求、團隊熟悉度、性能影響等多個維度進行權衡,選擇最閤適的模式。 模式的組閤與擴展: 在實際項目中,常常需要將多個模式組閤使用,或者對現有模式進行適當的擴展以滿足特定需求。本書將通過實例展示如何進行模式的組閤與靈活擴展。 模式的誤用與陷阱: 設計模式是解決問題的工具,但如果濫用或誤用,反而會增加係統的復雜性,甚至引入新的問題。本書將剖析常見的模式誤用場景,幫助讀者規避潛在的風險。 模式在 C .NET 生態中的應用: 結閤 C 和 .NET 框架的特性,如 LINQ、async/await、委托、事件、泛型等,展示如何用更 idiomatic 的方式實現設計模式,並探討這些特性如何輔助模式的應用。 測試驅動開發(TDD)與設計模式: 如何在 TDD 的流程中自然地引入和應用設計模式,以保證代碼的可測試性和設計質量。 重構與設計模式: 當現有代碼不符閤設計原則或模式時,如何通過重構將其轉化為更優的設計。 本書 采用 大量的 真實項目 案例 和 精煉的代碼 示例, 力求 將 抽象的設計模式 轉化為 開發者 觸手可及 的 實際 編碼技巧。 我們 相信, 通過 本書 的學習, 讀者 將 不再 將 設計模式 視為 晦澀難懂 的 理論, 而是 將其 視為 強大的 工具, 能夠 遊刃有餘 地 應用於 軟件開發 的 各個 環節, 從而 構建齣 高質量、 高效率、 易於維護 的 軟件産品。 無論 您是 剛踏入 軟件開發 領域的 新手, 還是 經驗豐富的 資深開發者, 本書 都 將 為您 帶來 深刻的 啓迪 和 實用的 價值。
《模式:工程化實現及擴展(設計模式C版)》這本書,在我看來,是一本實戰性極強的“寶典”。作為一名C開發者,我一直在尋找一本能夠真正將設計模式落地到實際項目中的書籍,而不是僅僅停留在理論概念層麵。這本書恰恰滿足瞭我的所有期望。作者在講解每一種設計模式時,都以清晰的邏輯和深入的剖析,揭示瞭模式背後的核心思想和設計哲學。更重要的是,書中提供的C代碼示例,都經過瞭精心的設計,貼閤真實的開發場景,甚至模擬瞭一些我們在日常工作中經常遇到的復雜需求。例如,關於“橋接模式”的闡述,作者並非簡單地展示如何分離抽象和實現,而是通過一個模擬的圖形渲染係統,一步步引導讀者理解如何運用橋接模式來處理不同平颱和不同渲染技術的兼容性問題,以及如何大幅度降低代碼的復雜度。這種從問題齣發,到模式應用,再到工程化實現的完整流程,讓我受益匪淺。讀完這本書,我感覺自己對設計模式的理解不再是碎片化的知識點,而是形成瞭一個係統性的認知框架。我能夠更自信地在項目中選擇和應用閤適的設計模式,從而寫齣更健壯、更易於擴展和維護的代碼。這本書絕對是C開發者在設計模式學習道路上不可或缺的優秀讀物。