設計模式是套思想,不過我是一名從事編碼的人員,有時候還經常覺得如何更巧的結合應用功能完成實現也要多多斟酌。
在我師傅、同事領導的協助下,這幾年做了一些.NET的項目,我酷愛C#語言,所以使用中發現C#實現一些設計模式的時候還有很多特色的內容,
因此,在博文周老師、陳編輯以及很多QQ群裡朋友的支援下,我覺得可以把以前的一些心得總結出來,所以萌生了寫本書的想法。
雖然這本書很多模式的擴充都很有限,但我希望可以做為一個引子,能夠與喜歡 模式 & C#語言 的朋友有個討論的基礎,希望可以不斷完善這部分內容。
設計模式——基於C#的工程化實現及擴充
第四版目錄
第一篇:準備內容 1
發掘C#語言物件導向化設計的潛力 1
第2章 重新研讀C#語言
2.1 C# 部分文法內容擴充
2.1.1命名空間(Namespace)
2.1.1.1 尷尬的現實狀況2
2.1.1.2 企業.NET類型系統的命名空間規劃樣本3
2.1.1.3 小結 4
2.1.2 簡潔的非同步通知機制——委託 4
2.1.2.1 用Delegate完成非同步呼叫 4
2. 1.2.2 1對n的通知 5
2. 1.2.3 調用匿名方法 7
2. 1.2.4 調用重載方法 8
2. 1.2.5 小結 10
2.1.3 考驗你的演算法抽象能力 ——泛型 10
2. 1.3.1 抽象 抽象能力支援10
2. 1.3.2 應用於模式 11
2. 1.3.3容器 14
2. 1.3.4型別參數約束 14
2. 1.3.5 小結 16
2.1.4 用作標籤的方式擴充項物件特性——屬性 (Attribute)16
2. 1.4.1 用Attribute指導模式 16
2. 1.4.2 進一步方便客戶程式調用 19
2. 1.4.3 小結 20
2.1.5 用索引器簡化的C#類型資訊訪問 20
2. 1.5.1 服務於集合 20
2. 1.5.2 封裝單列集合的訪問 21
2. 1.5.3 多列的集合 23
2. 1.5.4實作類別似RDBMS中聯合主鍵或唯一性索引的訪問 24
2. 1.5.5通過委託傳遞索引規則 24
2. 1.5.6 小結 25
2.1.6 融入C#語言的迭代機制——迭代器 25
2. 1.6.1 基本應用 26
2. 1.6.2 簡化複雜結構的遍曆 27
2. 1.6.3 小結 31
2.2 可重載運算子(Overloadable Operators)與轉換運算子(Conversion Operators) 32
2.2.1 The Day After Someday 32
2.2.2 用於有限的狀態迭代 33
2.2.3 操作集合 33
2.2.4類型的適配 35
2.2.5小結 36
2.3 面向外掛程式架構和現場部署的配置系統設計
2.3.1 認識.Net Framework提供的主要配置實體類 37
2.3.2 應用執行個體 38
2.3.3小結 46
2.4 實現依賴注入 46
2.4.1 背景介紹 46
2.4.2 樣本情景 47
2.4.3 Constructor注入 49
2.4.4 Setter注入 50
2.4.5 介面注入 51
2.4.6 基於Attribute實現注入——Attributer 52
2.4.7 小結 53
第3章 開始每個設計模式之前
3.1 new()的替代品 55
3.2 準備一個輕量的記憶體Cache 57
3.3 準備一個集中訪問設定檔的Broker 60
3.4 Web? Not Web? 63
3.5 小結 75
第二篇:建立型模式 76
第4章 工廠 & Factory 方法模式(Factory & Factory Method)
4.1 簡單工廠: 77
4.1.1 最簡單的工廠類 77
4.1.2根據規格加工產品——參數化工廠81
4.1.3 簡單工廠的局限性 81
4.2 經典回顧 81
4.3 解耦Concrete Factory與客戶程式 83
4.4 基於設定檔的Factory 84
4.5 批量工廠 87
4.5.1 開發情景 87
4.5.2定義產品類型容器 88
4.5.3 定義批量工廠和產品類型容器 89
4.5.4增設生產指導顧問——Director 90
4.5.5由Director指導的客戶程式 91
4.6 基於型別參數的Generic Factory 93
4.7 委託工廠類型Delegate Factory 95
4.8 小結 96
第5章 單件模式(Singleton)
5.1 經典回顧99
5.2 安全執行緒的Singleton 102
5.3 細節決定成敗 104
5.4 細顆粒度Singleton 105
5.4.1背景討論 105
5.4.2解決案頭應用中細顆粒度Singleton問題 105
5.4.3解決web應用中細顆粒度Singleton問題 107
5.4.4更通用的細顆粒度Singleton 109
5.5 自動更新的Singleton 120
5.6 參數化的Singleton 121
5.7 跨進程的Singleton 126
5.8 Singleton的擴充——Singleton-N 127
5.8.1定義具有執行狀態的抽象對象 128
5.8.2定義相應的Singleton-N執行個體集合 129
5.8.3在基本Singleton模式實現的架構下引入執行個體集合 130
5.9 引入設定檔管理Singleton 131
5.10 基於型別參數的Generic Singleton 132
5.11 由工廠類型協助Singleton執行個體管理141
5.12 小結 141
第6章 抽象原廠模式(Abstract Factory)
6.1經典回顧 143
6.2 按計劃實施生產 146
6.2.1 為抽象工廠補充類型映射器 146
6.2.2 處理模式的硬傷 147
6.3 定義計劃與生產間的映射關係 148
6.3.1 分析 148
6.3.2 登記映射關係
6.3.3 用TypeMapper協助工廠生產 150
6.3.4 定義實體TypeMapper和實體工廠 151
6.3.5 實現裝配機制 151
6.4 配置生產計劃 152
6.5 基於Delegate的生產外包 155
6.6小結 157
第7章 建立者模式 (Builder)
7.1經典回顧 160
7.2 非同步呼叫的BuildUp() 162
7.3 為Builder打個標籤 165
7.3.1完成工具類 165
7.3.2 定義標籤 166
7.3.3 學會看標籤 167
7.4 具有 裝配/卸載 能力的Builder 169
7.5 看著圖紙做加工——登記設定檔 171
7.5.1 把UML的對象變成XSD 173
7.5.2 把握梗概——刪除不經常變化的內容 173
7.5.3映射為配置節或配置元素 174
7.5.4 實現實體物件 175
7.5.5完成流水線生產 179
7.6 用迭代器控制流程水線 180
7.7小結 182
7.7.1基於型別參數的Generic Builder183
7.7.2分析 183
7.7.3流程最佳化重組 184
第8章 原型模式(Prototype)
8.1經典回顧 186
8.2表面模仿還是深入模仿 190
8.2.1 概念 190
8.2.2 製作實現複製的工具類型
8.2.3複製也要稍微保留點個性 193
8.2.4 定製並管理的複製過程 194
8.3重新定義原型方法 196
8.4 同時支援XML和二進位序列化的泛型集合類型處理
8.5小結
第三篇:結構型模式 198
第9章 適配器模式(Adapter)
9.1經典回顧199
9.2 進一步擴充適配範圍的組適配器202
9.3 Adapter——Adapter互聯模式 205
9.3.1分析 205
9.3.2方式1:客戶程式調度Adapter 207
9.3.3方式2: 基於標準約定調度Adapter207
9.3.4方式3: 藉助反射和約定完成非同步呼叫 208
9.4 用配置約定適配過程 209
9.5 XML資料的專用適配機制 210
9.6小結 212
第10章 橋模式(Bridge)
10.1 經典回顧 215
10.2 將複雜性進一步分解後的多級橋關係218
10.3 看著“圖紙”造橋221
10.4 具有約束關係的橋 223
10.5小結 225
第11章 組合模式(Composite)
11.1 經典回顧228
11.2用迭代器遍曆組合類別型 232
11.3 適於XML資訊的組合模式234
11.4小結 237
第12章 裝飾模式(Decorator)
12.1經典回顧
12.2具有自我更新特徵的裝飾模式
12.2.1分析 243
12.2.2抽象裝飾介面
12.2.3抽象狀態介面
12.2.4依據目前狀態修改裝飾
12.2.5測實驗證
12.3設計Decorator與Builder協作的產物 248
12.4把Decorator做成標籤
12.4.1 更“徹底”的Attribute注入
12.4.2方式1:採用.NET平台內建的AOP機制實現 251
12.4.3方式2:自訂代理攔截架構方式 254
12.4.4進一步分析 257
12.5小結 257
第13章 面板模式(Façade)
13.1.經典回顧
13.2 Façade介面 262
13.3 Remote Façade 263
13.4面向效能考慮的升級版Remote Façade——Data Transfer Object模式 266
13.5平台、開發語言無關的抽象Façade介面——WSDL 270
13.6 讓使用者更方便的Fluent Interface設計 270
13.7小結 272
第14章 享元模式(Flyweight)
14.1 經典回顧
14.2 制訂共用計劃
14.3 綜合性的共用體系——Object Pool 278
14.3.1 應用背景 279
14.3.2 總體技術結構 279
14.3.3 抽象類別型類型實體設計 280
14.3.4 享元模式的典型應用——緩衝 280 不改
14.3.5 樣本 281
14.4 用於平行處理的線程級享元
14.5 通過Delegate和隊列實現非同步Flyweight 285
14.6 小結 286
第15章 代理模式(Proxy)
15.1經典回顧 288
15.2遠端存取代理 290
15.2.1第一步 定義遠端存取的服務合約 291
15.2.2第二步 定義服務端的設定檔及相應的宿主程式 291
15.2.3第三步 產生用戶端遠程代理(Proxy)類型
15.2.4第四步 編寫用戶端程式 293
15.3資料訪問代理 294
15.4對象緩衝代理 296
15.5為代理過程增加預先處理和後續處理的支援
15.5.1第一步、定義外部處理機制的抽象結構 299
15.5.2第二步、定義新增處理的配置資訊 300
15.5.3第三步、定義配置解析對象 301
15.5.4第四步、修正服務端和代理類的處理過程 302
15.6小結 302
第四篇:行為型模式 301
第16章 職責鏈模式(Chain of Responsibility)
16.1.經典回顧
16.2 用斷點控制鏈式過程
16.3 鏈式反應
16.4 增加配置約束
16.5 小結 316
第17章 模版方法模式(Template Method)
17.1經典回顧
17.2滿足多套模版要求
17.3方法的模版——Delegate
17.4類型的模版——Generic
17.5 用配置勾勒的模版
17.6小結 327
第18章 解譯器模式(Interpreter)
18.1經典回顧
18.2採用Regex
18.3採用字典
18.4 採用XSD
18.5用XSD解釋訂製的業務語言
18.6小結
第19章 命令模式(Command)
19.1經典回顧
19.2輕量級的Command——委託
19.3非同步Command
19.4 把Command打包
19.4.1 面板模式方式
19.4.2組合模式方式
19.5 把Command排隊
19.6小結 362
第20章 迭代器模式(Iterator)
20.1經典回顧 365
20.2 C#化的Iterator 367
20.3小結 369
第21章 中介者模式(Mediator)
21.1經典回顧 373
21.2基於Delegate和事件的松耦合Mediator 378
21.3根據配置動態協調通知關係
21.4SOAP Mediator
21.5小結 383
第22章 備忘錄模式(Memento)
22.1經典回顧
22.2 把備忘壓棧
22.3 Memento的序列化和持久化 394
22.4小結 397
第23章 觀察者模式(Observer)
23.1經典回顧 402
23.2 NET內建的Observer機制——事件 406
23.3具有Observer的集合類型 408
23.4面向服務介面的Observer 410
23.5小結 413
第24章 狀態模式(State)
24.1經典回顧 416
24.2 State的序列化和持久化 420
24.3主動方式State 423
24.4觸發式State 423
24.5涉及使用者互動的狀態流轉 426
24.6用WF完成更易於編排的State 426
24.7小結 428
第25章 策略模式(Strategy)
25.1經典回顧
25.2 Strategy與Interpreter協作 433
25.3充分利用.NET Framework內建的Strategy介面 434
25.4 動態策略
25.5小結 438
第26章 訪問者模式(Visitor)
26.1經典回顧
26.2藉助反射實現Visitor 445
26.3用委託使參考關聯性更加鬆散
26.4小結 447
第五篇:小顆粒度基礎模式和應用案例 448
第27章 成例(Idioms)
27.1 Partial Class 449
27.1.1 體現組合關係
27.1.2 從多個側面刻畫類型
27.1.3與Visual Studio Add-ins的結合 452
27.1.4小結 452
27.2 Gateway 452
27.2.1封裝本地API的Gateway 453
27.2.2 封裝非C#語言提供者 455
27.2.3 封裝通用操作方法 455
27.2.4小結 458
27.3 Mapper 458
27.3.1介紹 458
27.3.2 資料對象映射器
27.3.3小結 466
27.4 Registry 467
27.4.1小結 471
27.5 Value Object 471
27.6通用資料載體DataSet和DataTable 473
27.7 Context 474
第28章GOF總結以及應用案例(Show Case)
28.1 GOF總結 476
28.1.1回顧GOF 476
28.2應用案例需求說明 476
28.3發現和分析 477
28.4模式應用 480
28.4.1已經採用的模式 480
28.4.2如何?具體資料來源無關 480
28.4.3提供執行前後定製處理的能力 492
28.4.4設計一個結構更加靈活的串連串配置訪問機制 494
28.5小結 500
第六篇:部分架構模式 501
第29章MVC模式(MVC)
29.1模式介紹 502
29.2樣本 504
29.2.1 混合方式
29.2.2分解對象職責
29.2.3主動方式M/V/C 509
29.3小結 512
第30章 管道——過濾器模式(Pipeline-Filter)
30.1 登機的管道流程 515
30.1.1 資料來源發起的推方式
30.1.2 資料接收方發起的拉方式
30.1.3 中介對象發起的推拉混合方式 518
30.1.4 資料來源/資料接收方分別發起的銜接方式 519
30.2樣本 520
30.2.1推方式樣本 520
30.2.2增加主動方式的Filter 525
30.3小結 527
第31章 出版—預定模式(Pub-Sub)
31.1生活中無處不在的“預定” 529
31.1.1面向單一主題的本地觀察者模式 530
31.1.2增加Proxy實現面向單一主題的分布式觀察者模式 530
31.1.3用出版者集中管理預定 531
31.1.4面向實體環境設計更多出版預定模式 534
31.2樣本 535
31.2.1資料實體模型部分 536
31.2.2業務實體模型部分 539
31.2.3具體實體物件部分 542
31.2.4單元測試 546
31.3小結 548
第32章Broker模式(Broker)
32.1越來越龐雜的分布式系統互動之惑 551
32.2樣本 554
32.3小結 557
第33章 訊息匯流排模式(Message Bus)
33.1用匯流排梳理企業系統內容 561
33.1.1分隔地區條件下的訊息匯流排 563
33.2小結 564
第七篇:部分Web和Web Service模式 565
第34章 頁面控制器模式(Page Controller)
34.1 用對象化思維抽象和擴充頁面操作邏輯
34.2樣本 567
34.3小結 567
第35章 實現Web服務依賴倒置
35.1 Web Service的模式化特徵: 569
35.2 第一層的封裝 570
35.3 SOA環境下典型的Web Service開發方式: 573
35.4依賴倒置原則及其Web Service中的應用 573
35.4.1分析 575
35.4.2實現樣本 576
35.5 基於WCF的工程化實現 583
35.5.1實現樣本 583
35.5.2藉助WCF擴充服務的對象化特徵 587
35.6 小結 588
第36章Web服務適配器模式(Web Service Adapter)
36.1Web Service下的介面適配問題 560
36.1.1常規情景分析 560
36.1.2Web Service間連續互動適配 560
36.1.3實施方式 562
36.2採用標準Web Service類型的樣本 563
36.2.1單純資料XSD適配: 563
36.2.2服務方法相容性適配: 569
36.2.3其它說明: 571
36.3採用WCF的樣本 572
36.3.1用Data Contract定義資料Schema 573
36.3.2定義不同的類型轉換方式樣本 574
36.4小結 576
第37章Web服務資料轉送對象模式(Web Service DTO)
37.1Web Service介面批量互動中的效能問題 579
37.1.1 DTO對象 579
37.1.2 DTO與消費者服務的對應關係 579
37.1.3部署設計考慮 581
37.1.4結構 581
37.2樣本 582
37.2.1沒有DTO對象的情況 583
37.2.2增加DTO對象的情況 585
37.3小結 587
37.4附件: 587
37.4.1實現DTO資料裝載的2種方式 587
第38章Web服務事件監控器模式(Web Service Event Monitor)
38.1如何為普通Web Service封裝事件機制 590
38.2樣本 591
38.3小結 596
第39章Web服務攔截過濾器模式(Web Service Intercepting Filter)
39.1通過攔截完成自訂特性的透明擴充 599
39.1.1實現方式 599
39.1.2.NET平台的實現技術 602
39.2樣本 604
39.2.1基於ASP.NET Web Service的IHttpModule方式 604
39.2.2基於WCF自訂攔截方式 606
39.3小結 610
第40章 面向關係資料和XML資料的領域邏輯模式(Domain Logic Pattern)
40.1實現業務領域邏輯的主要方法 612
40.1.1整體邏輯結構 612
40.1.2效能改進 613
40.1.3面向關聯式資料庫的商務服務設計 614
40.1.4面向XML資料的擴充設計 615
40.1.5配置機制設計 615
40.2樣本 616
40.2.1樣本情景 616
40.2.2測試內容準備 617
40.2.3實際測試過程 618
40.3小結 619
第41章 基於XML的應用建模(XML Based Application Model)
41.1世界是平的,但更是多元的 621
41.1.1更具擴充性的資料模型——XML 621
41.1.2讓非結構化資料可以被識別 626
41.1.3應對資料和內容的整合 628
41.1.4新的應用擴充: 630
41.1.5應對語義網路的複雜性 633
41.2小結 634