C++20 設計模式:可複用的面向對象設計方法 (原書第2版)

Dmitri Nesteruk

買這商品的人也買了...

商品描述

本書將C++標準的新版本應用於設計模式的實現。
除了介紹傳統的設計模式之外,本書還充實了對現代C++開發人員有用的新的設計模式和方法。
本書融合了作者多年的研究和實踐經驗,從C++新特性的角度展示瞭如何將設計模式化繁為簡,
並以詼諧風趣的語言闡述各個設計模式的優缺點和應用場景。

本書將提供一些現代C++技術案例,展示如何利用C++的新特性(比如,協程、模塊等)將一些難題化繁為簡。
本書所有示例程序都可以直接投入生產環境,不過,為了便於閱讀,部分示例程序做了適當的簡化。

通過閱讀本書,你將學會:
*如何使用創建型設計模式,比如構造器模式、工廠模式、原型模式和單例模式。
*如何實現結構型設計模式,比如適配器模式、橋接模式、裝飾器模式、外觀模式等。
*如何開發行為型設計模式,比如職責鏈模式、命令模式、迭代器模式、中介者模式等。
 

作者簡介

Dmitri Nesteruk
是一名定量分析師、開發者、課程和書籍的作者。
他對計算、定量金融和算法交易領域的軟件開發和集成實踐充滿興趣,
擅長C#和C++編程,以及基於CUDA和FPGA等技術的高性能計算。
自2009年以來,他一直是C#的MVP(最有價值專家)。

目錄大綱

Contents 目錄
譯者序
前言
審校者簡介
第1章引論1
1.1 本書的目標讀者2
1.2 關於代碼示例2
1.3 關於開發者工具3
1.4 重要概念3
1.4.1 奇異遞歸模板模式3
1.4.2 Mixin繼承4
1.4.3 舊風格的靜態多態5
1.4.4 概念與靜態多態6
1.4.5 屬性7
1.5 SOLID設計原則8
1.5.1 單一職責原則8
1.5.2 開閉原則10
1.5.3 里氏替換原則15
1.5.4 接口隔離原則17
1.5.5 依賴倒轉原則19
第一部分創建型設計模式
第2章構造器模式26
2.1 預想方案26
2.2 簡單構造器27
2.3 流式構造器28
2.4 向用戶傳達意圖28
2.5 Groovy風格的構造器30
2.6 組合構造器32
2.7 參數化構造器35
2.8 構造器模式的繼承性36
2.9 總結39
第3章工廠方法和抽象工廠模式41
3.1 預想方案41
3.2 工廠方法43
3.3 工廠44
3.4 工廠方法和多態46
3.5 嵌套工廠47
3.6 抽象工廠48
3.7 函數式工廠50
3.8 對象追踪51
3.9 總結52
第4章原型模式53
4.1 對象構建53
4.2 普通拷貝54
4.3 通過拷貝構造函數進行拷貝54
4.4 “虛”構造函數56
4.5 序列化58
4.6 原型工廠60
4.7 總結61
第5章單例模式62
5.1 作為全局對象的單例模式62
5.2 單例模式的經典實現63
5.3 單例模式存在的問題65
5.3.1 每線程單例68
5.3.2 環境上下文70
5.3.3 單例模式與控制反轉73
5.3.4 單態模式73
5.4 總結74
第二部分結構型設計模式
第6章適配器模式77
6.1 預想方案77
6.2 適配器79
6.3 臨時適配器對象80
6.4 雙向轉換器82
6.5 總結83
第7章橋接模式85
7.1 Pimpl模式85
7.2 橋接模式介紹87
7.3 總結89
第8章組合模式90
8.1 支持數組形式的屬性91
8.2 組合圖形對象93
8.3 神經網絡95
8.3.1 封裝組合模式97
8.3.2 概念上的改進98
8.3.3 概念和全局運算符99
8.4 組合模式的規範100
8.5 總結101
第9章裝飾器模式103
9.1 預想方案103
9.2 動態裝飾器104
9.3 靜態裝飾器107
9.4 函數裝飾器108
9.5 總結111
第10章外觀模式112
10.1 幻方生成器112
10.2 構建貿易終端116
10.2.1 高級終端117
10.2.2 “外觀”體現在哪裡118
10.3 總結119
第11章享元模式120
11.1 用戶名問題120
11.2 Boost.Flyweight122
11.3 字符串的範圍122
11.3.1 幼稚解法123
11.3.2 享元實現124
11.4 總結126
第12章代理模式127
12.1 智能指針127
12.2 屬性代理128
12.3 虛擬代理129
12.4 通信代理131
12.5 值代理133
12.6 總結135
第三部分行為型設計模式
第13章職責鏈模式138
13.1 預想方案138
13.2 指針鏈139
13.3 代理鏈141
13.4 總結144
第14章命令模式145
14.1 預想方案145
14.2 實現命令模式146
14.3 撤銷操作147
14.4 複合命令149
14.5 命令查詢分離152
14.6 總結154
第15章解釋器模式155
15.1 解析整數155
15.2 數值表達式求值156
15.2.1 詞法分析157
15.2.2 語法分析159
15.2.3 使用詞法分析器和
    語法分析器161
15.3 使用Boost.Spirit解析161
15.3.1 抽象語法樹162
15.3.2 語法分析器163
15.3.3 打印器164
15.4 總結164
第16章迭代器模式166
16.1 標準庫中的迭代器166
16.2 遍歷二叉樹168
16.3 使用協程的迭代171
16.4 總結172
第17章中介者模式174
17.1 聊天室174
17.2 中介者與事件178
17.3 中介者服務總線180
17.4 總結181
第18章備忘錄模式182
18.1 銀行賬戶182
18.2 撤銷功能和恢復功能183
18.3 內存注意事項186
18.4 使用備忘錄進行交互操作186
18.5 總結187
第19章空對像模式188
19.1 預想方案188
19.2 shared_ptr不是空對象190
19.3 設計改進190
19.4 隱式空對象191
19.5 與其他模式的交互191
19.6 總結192
第20章觀察者模式193
20.1 屬性觀察器193
20.2 Observer194
20.3 Observable195
20.4 連接觀察者和被觀察者196
20.5 依賴問題197
20.6 取消訂閱與線程安全197
20.7 可重入性198
20.8 Boost.Signals2中的觀察者模式200
20.9 視圖201
20.10 總結203
第21章狀態模式204
21.1 狀態驅動的狀態轉換204
21.2 設計狀態機207
21.3 基於開關的狀態機209
21.4 Boost.MSM狀態機211
21.5 總結214
第22章策略模式215
22.1 動態策略216
22.2 靜態策略219
22.3 總結219
第23章模板方法模式221
23.1 遊戲模擬221
23.2 函數式模板方法223
23.3 總結224
第24章訪問者模式226
24.1 侵入式訪問者227
24.2 反射式打印組件228
24.3 什麼是分發230
24.4 經典訪問者231
24.5 非循環訪問者234
24.6 std::variant和std::visit236
24.7 總結237