C++20設(shè)計(jì)模式:可復(fù)用的面向?qū)ο笤O(shè)計(jì)方法(原書第2版)
定 價(jià):89 元
叢書名:華章程序員書庫
- 作者:[俄]德米特里·內(nèi)斯特魯克(Dmitri Nesteruk)
- 出版時(shí)間:2022/12/1
- ISBN:9787111716228
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8C++
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書將C++標(biāo)準(zhǔn)的新版本應(yīng)用于設(shè)計(jì)模式的實(shí)現(xiàn)。除了介紹傳統(tǒng)的設(shè)計(jì)模式之外,本書還充實(shí)了對(duì)現(xiàn)代C++開發(fā)人員有用的新的設(shè)計(jì)模式和方法。本書融合了作者多年的研究和實(shí)踐經(jīng)驗(yàn),從C++新特性的角度展示了如何將設(shè)計(jì)模式化繁為簡,并以詼諧風(fēng)趣的語言闡述各個(gè)設(shè)計(jì)模式的優(yōu)缺點(diǎn)和應(yīng)用場景。
本書將提供一些現(xiàn)代C++技術(shù)案例,展示如何利用C++的新特性(比如,協(xié)程、模塊等)將一些難題化繁為簡。本書所有示例程序都可以直接投入生產(chǎn)環(huán)境,不過,為了便于閱讀,部分示例程序做了適當(dāng)?shù)暮喕?br />
通過閱讀本書,你將學(xué)會(huì):
*如何使用創(chuàng)建型設(shè)計(jì)模式,比如構(gòu)造器模式、工廠模式、原型模式和單例模式。
*如何實(shí)現(xiàn)結(jié)構(gòu)型設(shè)計(jì)模式,比如適配器模式、橋接模式、裝飾器模式、外觀模式等。
*如何開發(fā)行為型設(shè)計(jì)模式,比如職責(zé)鏈模式、命令模式、迭代器模式、中介者模式等。
界正在發(fā)生變化!有些變化令人欣喜:C++20標(biāo)準(zhǔn)終于得到正式批準(zhǔn),模塊和概念等C++20語言特性已出現(xiàn)在當(dāng)前流行的C++編譯器中。
當(dāng)然,在任何一個(gè)編譯器中,對(duì)于C++20的所有特性,我們還遠(yuǎn)沒有一個(gè)完整的實(shí)現(xiàn)。例如,即使能夠在自己的代碼中使用模塊,我們?nèi)匀恍枰却龢?biāo)準(zhǔn)庫、Boost和其他流行的庫提供對(duì)模塊的實(shí)現(xiàn)。但是,我們現(xiàn)在改變了設(shè)計(jì)模式的實(shí)現(xiàn)方式。例如,在過去,如果我們希望確保某個(gè)模板參數(shù)實(shí)現(xiàn)某個(gè)接口,那么將使用static_assert。但是有了C++20,我們就可以利用概念,概念具有可復(fù)用性(避免剪切與粘貼)和自描述性的特點(diǎn)。
隨著C++永無止境地演變,我們能夠感覺到我們正處于一個(gè)永不停歇的旅程中,并且變得越來越好,唯一的挑戰(zhàn)是學(xué)習(xí)如何利用新功能。我希望本書能夠成為一個(gè)有用的工具。
德米特里·內(nèi)斯特魯克(Dmitri Nesteruk)是一名定量分析師、開發(fā)者、課程和書籍的作者。他對(duì)計(jì)算、定量金融和算法交易領(lǐng)域的軟件開發(fā)和集成實(shí)踐充滿興趣,擅長C#和C++編程,以及基于CUDA和FPGA等技術(shù)的高性能計(jì)算。自2009年以來,他一直是C#的MVP(最有價(jià)值專家)。
Contents 目 錄
譯者序
前言
審校者簡介
第1章 引論1
1.1 本書的目標(biāo)讀者2
1.2 關(guān)于代碼示例2
1.3 關(guān)于開發(fā)者工具3
1.4 重要概念3
1.4.1 奇異遞歸模板模式3
1.4.2 Mixin繼承4
1.4.3 舊風(fēng)格的靜態(tài)多態(tài)5
1.4.4 概念與靜態(tài)多態(tài)6
1.4.5 屬性7
1.5 SOLID設(shè)計(jì)原則8
1.5.1 單一職責(zé)原則8
1.5.2 開閉原則10
1.5.3 里氏替換原則15
1.5.4 接口隔離原則17
1.5.5 依賴倒轉(zhuǎn)原則19
第一部分 創(chuàng)建型設(shè)計(jì)模式
第2章 構(gòu)造器模式26
2.1 預(yù)想方案26
2.2 簡單構(gòu)造器27
2.3 流式構(gòu)造器28
2.4 向用戶傳達(dá)意圖28
2.5 Groovy風(fēng)格的構(gòu)造器30
2.6 組合構(gòu)造器32
2.7 參數(shù)化構(gòu)造器35
2.8 構(gòu)造器模式的繼承性36
2.9 總結(jié)39
第3章 工廠方法和抽象工廠模式41
3.1 預(yù)想方案41
3.2 工廠方法43
3.3 工廠44
3.4 工廠方法和多態(tài)46
3.5 嵌套工廠47
3.6 抽象工廠48
3.7 函數(shù)式工廠50
3.8 對(duì)象追蹤51
3.9 總結(jié)52
第4章 原型模式53
4.1 對(duì)象構(gòu)建53
4.2 普通拷貝54
4.3 通過拷貝構(gòu)造函數(shù)進(jìn)行拷貝54
4.4 “虛”構(gòu)造函數(shù)56
4.5 序列化58
4.6 原型工廠60
4.7 總結(jié)61
第5章 單例模式62
5.1 作為全局對(duì)象的單例模式62
5.2 單例模式的經(jīng)典實(shí)現(xiàn)63
5.3 單例模式存在的問題65
5.3.1 每線程單例68
5.3.2 環(huán)境上下文70
5.3.3 單例模式與控制反轉(zhuǎn)73
5.3.4 單態(tài)模式73
5.4 總結(jié)74
第二部分 結(jié)構(gòu)型設(shè)計(jì)模式
第6章 適配器模式77
6.1 預(yù)想方案77
6.2 適配器79
6.3 臨時(shí)適配器對(duì)象80
6.4 雙向轉(zhuǎn)換器82
6.5 總結(jié)83
第7章 橋接模式85
7.1 Pimpl模式85
7.2 橋接模式介紹87
7.3 總結(jié)89
第8章 組合模式90
8.1 支持?jǐn)?shù)組形式的屬性91
8.2 組合圖形對(duì)象93
8.3 神經(jīng)網(wǎng)絡(luò)95
8.3.1 封裝組合模式97
8.3.2 概念上的改進(jìn)98
8.3.3 概念和全局運(yùn)算符99
8.4 組合模式的規(guī)范100
8.5 總結(jié)101
第9章 裝飾器模式103
9.1 預(yù)想方案103
9.2 動(dòng)態(tài)裝飾器104
9.3 靜態(tài)裝飾器107
9.4 函數(shù)裝飾器108
9.5 總結(jié)111
第10章 外觀模式112
10.1 幻方生成器112
10.2 構(gòu)建貿(mào)易終端116
10.2.1 高級(jí)終端117
10.2.2 “外觀”體現(xiàn)在哪里118
10.3 總結(jié)119
第11章 享元模式120
11.1 用戶名問題120
11.2 Boost.Flyweight122
11.3 字符串的范圍122
11.3.1 幼稚解法123
11.3.2 享元實(shí)現(xiàn)124
11.4 總結(jié)126
第12章 代理模式127
12.1 智能指針127
12.2 屬性代理128
12.3 虛擬代理129
12.4 通信代理131
12.5 值代理133
12.6 總結(jié)135
第三部分 行為型設(shè)計(jì)模式
第13章 職責(zé)鏈模式138
13.1 預(yù)想方案138
13.2 指針鏈139
13.3 代理鏈141
13.4 總結(jié)144
第14章 命令模式145
14.1 預(yù)想方案145
14.2 實(shí)現(xiàn)命令模式146
14.3 撤銷操作147
14.4 復(fù)合命令149
14.5 命令查詢分離152
14.6 總結(jié)154
第15章 解釋器模式155
15.1 解析整數(shù)155
15.2 數(shù)值表達(dá)式求值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 總結(jié)164
第16章 迭代器模式166
16.1 標(biāo)準(zhǔn)庫中的迭代器166
16.2 遍歷二叉樹168
16.3 使用協(xié)程的迭代171
16.4 總結(jié)172
第17章 中介者模式174
17.1 聊天室174
17.2 中介者與事件178
17.3 中介者服務(wù)總線180
17.4 總結(jié)181
第18章 備忘錄模式182
18.1 銀行賬戶182
18.2 撤銷功能和恢復(fù)功能183
18.3 內(nèi)存注意事項(xiàng)186
18.4 使用備忘錄進(jìn)行交互操作186
18.5 總結(jié)187
第19章 空對(duì)象模式188
19.1 預(yù)想方案188
19.2 shared_ptr不是空對(duì)象190
19.3 設(shè)計(jì)改進(jìn)190
19.4 隱式空對(duì)象191
19.5 與其他模式的交互191
19.6 總結(jié)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 總結(jié)203
第21章 狀態(tài)模式204
21.1 狀態(tài)驅(qū)動(dòng)的狀態(tài)轉(zhuǎn)換204
21.2 設(shè)計(jì)狀態(tài)機(jī)207
21.3 基于開關(guān)的狀態(tài)機(jī)209
21.4 Boost.MSM狀態(tài)機(jī)211
21.5 總結(jié)214
第22章 策略模式215
22.1 動(dòng)態(tài)策略216
22.2 靜態(tài)策略219
22.3 總結(jié)219
第23章 模板方法模式221
23.1 游戲模擬221
23.2 函數(shù)式模板方法223
23.3 總結(jié)224
第24章 訪問者模式226
24.1 侵入式訪問者227
24.2 反射式打印組件228
24.3 什么是分發(fā)230
24.4 經(jīng)典訪問者231
24.5 非循環(huán)訪問者234
24.6 std::variant和std::visit236
24.7 總結(jié)237