猜你喜欢
C++20设计模式:可复用的面向对象设计方法(原书第2版)

C++20设计模式:可复用的面向对象设计方法(原书第2版)

书籍作者:德米特里·内斯特鲁克 ISBN:9787111716228
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:6751
创建日期:2023-05-26 发布日期:2023-05-26
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
本书将C++标准的新版本应用于设计模式的实现。除了介绍传统的设计模式之外,本书还充实了对现代C++开发人员有用的新的设计模式和方法。本书融合了作者多年的研究和实践经验,从C++新特性的角度展示了如何将设计模式化繁为简,并以诙谐风趣的语言阐述各个设计模式的优缺点和应用场景。

本书将提供一些现代C++技术案例,展示如何利用C++的新特性(比如,协程、模块等)将一些难题化繁为简。本书所有示例程序都可以直接投入生产环境,不过,为了便于阅读,部分示例程序做了适当的简化。

通过阅读本书,你将学会:
*如何使用创建型设计模式,比如构造器模式、工厂模式、原型模式和单例模式。
*如何实现结构型设计模式,比如适配器模式、桥接模式、装饰器模式、外观模式等。
*如何开发行为型设计模式,比如职责链模式、命令模式、迭代器模式、中介者模式等。
作者简介
德米特里·内斯特鲁克(Dmitri Nesteruk)是一名定量分析师、开发者、课程和书籍的作者。他对计算、定量金融和算法交易领域的软件开发和集成实践充满兴趣,擅长C#和C++编程,以及基于CUDA和FPGA等技术的高性能计算。自2009年以来,他一直是C#的MVP(最有价值专家)。
前言
界正在发生变化!有些变化令人欣喜:C++20标准终于得到正式批准,模块和概念等C++20语言特性已出现在当前流行的C++编译器中。

当然,在任何一个编译器中,对于C++20的所有特性,我们还远没有一个完整的实现。例如,即使能够在自己的代码中使用模块,我们仍然需要等待标准库、Boost和其他流行的库提供对模块的实现。但是,我们现在改变了设计模式的实现方式。例如,在过去,如果我们希望确保某个模板参数实现某个接口,那么将使用static_assert。但是有了C++20,我们就可以利用概念,概念具有可复用性(避免剪切与粘贴)和自描述性的特点。

随着C++永无止境地演变,我们能够感觉到我们正处于一个永不停歇的旅程中,并且变得越来越好,唯一的挑战是学习如何利用新功能。我希望本书能够成为一个有用的工具。
目录
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