目录 第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所指字符串的内容