C++20設計模式:可復用的面向對象設計方法(原書第2版)
定 價:89 元
叢書名:華章程序員書庫
- 作者:[俄]德米特里·內斯特魯克(Dmitri Nesteruk)
- 出版時間:2022/12/1
- ISBN:9787111716228
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP312.8C++
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書將C++標準的新版本應用于設計模式的實現。除了介紹傳統(tǒng)的設計模式之外,本書還充實了對現代C++開發(fā)人員有用的新的設計模式和方法。本書融合了作者多年的研究和實踐經驗,從C++新特性的角度展示了如何將設計模式化繁為簡,并以詼諧風趣的語言闡述各個設計模式的優(yōu)缺點和應用場景。
本書將提供一些現代C++技術案例,展示如何利用C++的新特性(比如,協(xié)程、模塊等)將一些難題化繁為簡。本書所有示例程序都可以直接投入生產環(huán)境,不過,為了便于閱讀,部分示例程序做了適當的簡化。
通過閱讀本書,你將學會:
*如何使用創(chuàng)建型設計模式,比如構造器模式、工廠模式、原型模式和單例模式。
*如何實現結構型設計模式,比如適配器模式、橋接模式、裝飾器模式、外觀模式等。
*如何開發(fā)行為型設計模式,比如職責鏈模式、命令模式、迭代器模式、中介者模式等。
界正在發(fā)生變化!有些變化令人欣喜:C++20標準終于得到正式批準,模塊和概念等C++20語言特性已出現在當前流行的C++編譯器中。
當然,在任何一個編譯器中,對于C++20的所有特性,我們還遠沒有一個完整的實現。例如,即使能夠在自己的代碼中使用模塊,我們仍然需要等待標準庫、Boost和其他流行的庫提供對模塊的實現。但是,我們現在改變了設計模式的實現方式。例如,在過去,如果我們希望確保某個模板參數實現某個接口,那么將使用static_assert。但是有了C++20,我們就可以利用概念,概念具有可復用性(避免剪切與粘貼)和自描述性的特點。
隨著C++永無止境地演變,我們能夠感覺到我們正處于一個永不停歇的旅程中,并且變得越來越好,唯一的挑戰(zhàn)是學習如何利用新功能。我希望本書能夠成為一個有用的工具。
德米特里·內斯特魯克(Dmitri Nesteruk)是一名定量分析師、開發(fā)者、課程和書籍的作者。他對計算、定量金融和算法交易領域的軟件開發(fā)和集成實踐充滿興趣,擅長C#和C++編程,以及基于CUDA和FPGA等技術的高性能計算。自2009年以來,他一直是C#的MVP(最有價值專家)。
Contents 目 錄
譯者序
前言
審校者簡介
第1章 引論1
1.1 本書的目標讀者2
1.2 關于代碼示例2
1.3 關于開發(fā)者工具3
1.4 重要概念3
1.4.1 奇異遞歸模板模式3
1.4.2 Mixin繼承4
1.4.3 舊風格的靜態(tài)多態(tài)5
1.4.4 概念與靜態(tài)多態(tài)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
第一部分 創(chuàng)建型設計模式
第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 工廠方法和多態(tài)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 環(huán)境上下文70
5.3.3 單例模式與控制反轉73
5.3.4 單態(tài)模式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 組合模式的規(guī)范100
8.5 總結101
第9章 裝飾器模式103
9.1 預想方案103
9.2 動態(tài)裝飾器104
9.3 靜態(tài)裝飾器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 使用協(xié)程的迭代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章 狀態(tài)模式204
21.1 狀態(tài)驅動的狀態(tài)轉換204
21.2 設計狀態(tài)機207
21.3 基于開關的狀態(tài)機209
21.4 Boost.MSM狀態(tài)機211
21.5 總結214
第22章 策略模式215
22.1 動態(tài)策略216
22.2 靜態(tài)策略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 什么是分發(fā)230
24.4 經典訪問者231
24.5 非循環(huán)訪問者234
24.6 std::variant和std::visit236
24.7 總結237