C++新经典:设计模式

C++新经典:设计模式"

作者:王健伟
ISBN:9787302601982
定价:¥99
字数:千字
页数:
出版时间:2022.08.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

用C++语言来讲述设计模式的书非常少,绝大部分书籍是使用Java语言讲述设计模式,而且能把设计模式讲述得比较清楚的书也并不多见。绝大部分书籍在讲解设计模式时所举的例子和实际工作中所面对的真正项目差别很大,读者学习后感觉不之所云,更别提实际运用。设计模式知识本身并不复杂,但讲解这门知识的难度非常大,设计模式主要应该讲明白两方面的知识:①某个设计模式对应的代码怎样编写;②该设计模式解决了什么样的问题。只要这两方面的知识讲明白,自然就知道在什么场合下应该采用这种设计模式。

本书面对的是希望系统学习C++设计模式方面知识的中高级C++开发者,书中将逐一详解二十四个常见的设计模式。书中将摆脱以往枯燥的单纯介绍设计模式的讲解方法,以一个实际的游戏案例贯穿讲解。当然,因为设计模式的应用场合复杂多变,无法在一个案例中覆盖所有设计模式,那么对于这种设计模式,笔者将单独举例进行讲解。

前言

亲爱的读者,如果你已经读完了笔者的《C++新经典》《C++新经典: 对象模型》,并希望将来能够驾驭更大型的C++项目,那么不要错过这本重要的C++进阶书籍。

书籍介绍

设计模式是程序员在长期的开发实践中总结出的一套提高开发效率的编程方法,是被反复使用的代码设计经验总结,是在特定问题发生时的可重用解决方案,体现着人们尝试解决某些问题时的智慧。使用设计模式的主要目的是在设计大型项目时,保证所设计的模块之间代码的灵活性和可复用性。

用C++语言讲述设计模式的书非常少,大部分作者使用Java语言,而且在讲解设计模式时所举的例子和实际工作中所面对的真实案例差别较大,读者学习后感觉实际运用有困难。

设计模式知识本身并不复杂,但讲清楚这门知识的难度非常大,设计模式主要应该讲明白两方面的知识: 

(1) 某个设计模式对应的代码怎样编写; 

(2) 该设计模式解决了什么样的问题。

只要把这两方面的知识讲明白,读者就会知道在什么场合下应该采用何种设计模式。

本书面对的是希望系统学习C++设计模式方面知识的中高级开发者,将逐一详解24个常见的设计模式。为摆脱以往枯燥的单纯介绍设计模式的讲解方法,书中内容以一个实际的游戏案例贯穿。当然,因为设计模式的应用场合复杂多变,无法在一个案例中覆盖所有设计模式,所以对于这种设计模式,笔者将单独举例进行讲解。在讲解过程中,一般会首先说明传统编码中将会遇到的问题,而后随着需求的不断增加和变化,代码需要进行重构,从而引出各种设计模式的实际运用,并穿插讲解面向对象程序设计的各个原则。

每个设计模式都会列举一到多个来自实际工作中的范例,帮助读者理解该模式要解决的问题以及详细实现该设计模式的方法,使读者理解和明白在遇到什么样的问题时可以利用哪种设计模式来解决。

书中的内容尽量化繁为简,不会把一些非常复杂难懂的采用设计模式的实战案例搬进来。实践证明,在设计模式中过多地介绍复杂的实战案例只是听起来不错,但因其固有的复杂性,会对学习者造成极大的理解负担,还会“喧宾夺主”,使得学习者既不能理解案例,也无法掌握设计模式。

阅读完本书并不是学习设计模式的结束,而是一个新的开始,读者应该尽可能多地阅读实际项目代码,运用设计模式不断思考和总结,并在实践中进一步提高自己对设计模式的运用能力。

需要的基础知识

本书定位为“C++进阶”书籍,需要读者对C++开发有比较好的基础(例如,学习单件模式时要求对多线程编程已经有比较好的掌握),尤其是对多态、虚函数的理解和使用必须做到明白无误,因为这两个概念在设计模式中体现得淋漓尽致。强烈建议读者在阅读本书之前先阅读笔者所著的《C++新经典: 对象模型》,该书对多态和虚函数的实现原理有非常详细的解释。《C++新经典: 对象模型》是一本值得珍藏的书,能够让读者对本书的学习如虎添翼。本书所涉及的范例代码不需要用到C++11新标准中的内容,所以不要求读者掌握C++11新标准。

书籍阅读进度

全书共22章,此外还包括附录A和附录B。第1章是理论知识,包括对设计模式和软件开发思想的介绍以及具体编程环境搭建工作的说明。理论知识读者可以进行阅读并在心目中有个大致印象,对于一些重点内容可以适当做标记以方便将来的复习,编程环境的搭建工作建议遵照书中第1章描述进行,以确保后续书中讲解的内容能够顺利演示。整个第1章的学习内容建议1周之内完成。从第2章开始一直到第22章,会详细讲解24个设计模式,每个设计模式的学习和实践(在实际计算机上运行通过书中的各个范例)所花费的时间建议不超过1周,这意味着大概需要24周的时间来学完24个模式。

附录A和附录B有极高的学习价值,读者千万不可以因为这些内容放在附录中而轻视,要以同样认真的态度学习,建议每周至少学习一节内容(例如,A.1算作一节),这两个附录大概需要额外的10周学完。

对于上班的读者,可以尽量将学习时间安排在晚上和周末。整本书大概需要245天的学习时间,再将时间稍微延后一些,能够在365天(一年)的时间之内学完,就是一种比较适当的学习速度。在学习过程中,一定要动起手来,书中每个地方的内容、代码,都要亲自实践来验证,并且都要保证验证成功,动手实践的步骤是往自己的大脑中深入镌刻真正知识的步骤,一旦缺少这个步骤,你的记忆就会不深,掌握的知识就会不牢。

运行环境

本书的范例全部在Windows操作系统下的Visual Studio 2019集成开发环境下调试通过。之所以选择这个平台环境,是因为它对开发者相当友好,开发和调试程序特别方便,尤其对初学者,极大降低了学习难度。

书中也详细阐述了在Windows操作系统下安装Visual Studio 2019的过程,由于对开发环境的版本没有太高要求,所以如果读者有其他低版本的Visual Studio也可以使用。对于在Linux下从事C/C++开发的读者,书中的范例基本上不做改动就可以跨操作系统平台运行。

资料获取

本书有完整的配套学习资料(源码),读者可以免费获取。获取方法如下: 

(1) 请查找并关注“程序员速成”微信公众号。

(2) 在微信公众号中,输入“设计模式”4个字,就可以得到配套学习资料下载链接。

C++知识体系庞杂,而C++模板与泛型编程方面的知识又具有一定深度和难度,由于水平所限,虽然笔者非常尽心尽力,但书中错误在所难免,恳请各位读者发现错误后不吝指教。

作者2022年4月

目录

第1章设计模式与软件开发思想、编程环境介绍

1.1设计模式概述

1.1.1设计模式基本概念

1.1.2设计模式中的抽象思维

1.1.3学习设计模式普遍存在的问题

1.1.4设计模式的缺点

1.1.5设计模式在实际工作中的应用和学习方法

1.1.6学习设计模式的态度、方法和本书的特点

1.2软件开发思想、设计模式分类与讲解规划

1.2.1大型项目的软件开发思想

1.2.2设计模式分类及讲解规划

1.3C++编程环境介绍

1.3.1C++编程环境搭建说明

1.3.2创建最基本的能运行的C++程序

1.3.3Visual Studio中程序的调试方法

第2章模板方法模式

2.1一个具体实现范例的逐步重构

2.2引入模板方法模式

2.3模板方法模式的UML图

2.4程序代码的进一步完善及应用联想

第3章工厂模式、原型模式、建造者模式

3.1工厂模式

3.1.1简单工厂模式

3.1.2工厂方法模式

3.1.3抽象工厂模式

3.2原型模式

3.2.1通过工厂方法模式演变到原型模式

3.2.2引入原型模式

3.3建造者模式

3.3.1一个具体实现范例的逐步重构

3.3.2引入建造者模式

3.3.3另一个建造者模式的范例

3.3.4建造者模式的总结

第4章策略模式

4.1一个具体实现范例的逐步重构

4.2依赖倒置原则

第5章观察者模式

5.1一个遍历问题导致的低效率范例

5.2引入观察者模式

5.3应用联想

第6章装饰模式

6.1问题的提出

6.2引入装饰模式

6.3另一个装饰模式的范例

第7章单件模式

7.1单件类的基本概念和实现

7.2单件类在多线程中可能导致的问题

7.3饿汉式与懒汉式

7.4单件类对象内存释放问题

7.5单件类定义、UML图及另外一种实现方法

第8章外观模式

8.1一个配置相关的范例

8.2引入外观模式

8.3另一个外观模式的范例

第9章命令模式

9.1通过一个范例引出命令模式代码编写方法

9.2引入命令模式

9.3命令模式用途研究

9.3.1改造范例增加对象使用时的独立性

9.3.2命令模式使用场景与特点总结

第10章迭代器模式

10.1容器和迭代器的简单范例

10.2单一职责原则

10.2.1单一职责原则的定义

10.2.2内聚与耦合

10.3迭代器模式的范例及现代C++中的迭代器

10.3.1迭代器模式范例

10.3.2现代C++中的迭代器

第11章组合模式

11.1一个基本的内容遍历范例

11.2使用组合模式改造内容遍历范例

11.3引入组合模式

11.4透明组合模式与安全组合模式

11.5其他使用组合模式的场景探讨

第12章状态模式

12.1一个基本的状态转换范例

12.2引入状态模式

12.3状态类的单件实现方式

第13章享元模式

13.1从一个典型的范例开始

13.2引入享元模式

第14章代理模式

14.1基本概念和范例

14.2引入代理模式

14.3代理模式的应用场合探究

14.3.1代理模式常用应用场景

14.3.2缓存/缓冲代理范例

第15章适配器模式

15.1一个简单的范例

15.2引入适配器模式

15.3类适配器

15.4适配器模式的扩展运用

第16章桥接模式

16.1一个传统的继承范例导致子类数量爆炸式增长

16.2将类与类之间的继承关系改为委托关系

16.3引入桥接模式

第17章中介者模式

17.1中介者的基本概念

17.2中介者模式范例的引入

17.3引入中介者模式

第18章备忘录模式

18.1一个具体实现范例

18.2引入备忘录模式

第19章职责链模式

19.1一个关于涨薪审批的范例

19.2引入职责链模式

19.3单纯与非单纯的职责链模式

第20章访问者模式

20.1一个具体范例的逐渐演化

20.2引入访问者模式

20.3访问者模式深入理解

第21章解释器模式

21.1一个用解释器模式编写的范例

21.2引入解释器模式

21.3机器人运动控制范例

第22章设计模式总结

附录A类和对象

A.1静态对象的探讨与全局对象的构造顺序

A.1.1静态对象的探讨

A.1.2全局对象的构造顺序问题

A.2拷贝构造函数和拷贝赋值运算符

A.2.1拷贝构造函数和拷贝赋值运算符的书写

A.2.2对象自我赋值产生的问题

A.2.3继承关系下拷贝构造函数和拷贝赋值运算符的书写

A.2.4拷贝构造函数和拷贝赋值运算符中重复代码的处理

A.3类的public继承(isa关系)及代码编写规则

A.3.1子类遮蔽父类的普通成员函数

A.3.2父类的纯虚函数接口

A.3.3父类的虚函数接口

A.3.4为纯虚函数指定实现体

A.3.5类的public继承(isa关系)综合范例

A.3.6public继承关系下的代码编写规则

A.4类与类之间的组合关系与委托关系

A.4.1组合关系

A.4.2委托关系

A.5类的private继承探讨

A.6不能被拷贝构造和拷贝赋值的类对象

A.7虚析构函数的内存泄漏问题深谈

A.8类设计中的一些技巧

A.8.1优先考虑为成员变量提供访问接口

A.8.2如何避免将父类的虚函数暴露给子类

A.8.3不要在类的构造函数与析构函数中调用虚函数

A.8.4析构函数的虚与非虚谈

A.8.5抽象类的模拟

A.8.6尽量避免隐式类型转换

A.8.7强制类对象不可以或只可以在堆上分配内存

A.9命名空间使用的一些注意事项

A.10类定义的相互依赖与类的前向声明

附录B引用计数基础理论和实践

B.1shared_ptr实现及string存储简单说明

B.1.1shared_ptr智能指针实现简单说明

B.1.2string类型字符串存储方式的简单说明

B.2通过写时复制方式实现的mystring类

B.2.1骨架与计数设计

B.2.2构造函数

B.2.3拷贝构造函数

B.2.4析构函数

B.2.5拷贝赋值运算符

B.2.6外部加锁、内部加锁、写时复制

B.2.7通过指针修改mystring所指字符串的内容

作者简介

编辑推荐

本书将逐一详解二十四个常见的设计模式。书中将摆脱以往枯燥的单纯介绍设计模式的讲解方法,以一个实际的游戏案例贯穿讲解。

作者寄语

王健伟 单位:自由职业者;职务、职称:无;性别:男 年龄:44 专业:计算机及其应用  学历:大专  研究领域:计算机软件开发,以C++语言开发为主,涉及领域为网络通信、网络安全、网络游戏等 研究成果:著有《Crystal Reports水晶报表设计与开发实务》,四门视频教程《C语言入门》、《C++从入门到精通》、《C++对象模型探索》、《Linux C++通讯架构实战卷1》已取得著作权并在网易云课堂、51cto、课课家等在线教育网站长期居于课程畅销榜的最前列。

电子资料

www.luweidong.cn

下一个