《C++新经典设计模式》之第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.1 概述
1.1.1 基本概念
模式,事物的标准样式或者针对特定问题的可重用解决方案。
设计模式(Design Pattern):
- 反复使用的代码设计经验的总结。
- 提高开发效率的编程方法。
- 常见问题的通用解决方法。
- 特定问题发生时的可重用解决方案。
- 描述模块或类对象间关系、职责,以及它们之间的分工与合作。
- 保证模块间的代码灵活性和可复用性,增加了复杂性。
- 灵活性(可扩展性/低耦合性)
游戏中人物和衣服分开。修改现有代码不影响其他部分代码(修改代码集中在一起)。增加内容时,不或少修改已有内容。
- 可复用性
可重复用,被多处调用。多态性。
1.1.2 抽象思维
- 耦合:模块相互依赖,互相影响。
- 解耦合:切断模块的依赖关系,一个模块的更改不会影响另一个模块。
- 概念
从事物中抽取或提炼本质、共性的内容组合(封装)到一起。
分解法:复杂事物分解成若干简单事物。
抽象法:简单事物抽象出本质内容并封装起来。
- 目的
减少代码重复性,方便代码的扩展。
稳定的、不怎么变化的内容作为模块,单独定义。
变化的部分放到子类中去实现。
- 检验
项目需求发生更改,不更改现有代码,增加新代码应对需求变更。
继承:
(1)抽象机制——抽取本质的、共性的内容放到基类中;
(2)可重用机制——基类中的内容,直接拿过来使用。
类内容太多,进一步拆分。单一职责原则,一个类只干好一个事情,承担一种职责。
1.1.3 存在问题
- 不会用
忘记设计模式,先面对具体要解决的问题。
遇到问题笨重方法解决设计模式解决
- 滥用
遵守原则:
- 不要过度设计,没必要考虑太长久。
- 设计很主观,非一步到位,不断调整和修改,重构。
- 考虑模式适合,代码实用性和易读性更重要。
- 无用论
代码量多时,后期难以扩展和维护。
1.1.4 缺点
- 增加程序书写的复杂性。
- 增加学习和理解的负担。
- 一定程度上降低程序的运行效率。
1.1.5 应用与学习方法
- 日常小项目
用得少。
- 代码少,需求变动时,修改代码方便。
- 逻辑功能单一,不需考虑复用。
- 可能无意中使用了设计模式。
- 大项目与框架类项目
- 掌握设计模式概念和具体解决问题,遇到问题时快速识别和运用。
- 编写测试代码并体验该模式的工作过程。
- 思考和总结设计经验,及时调整和更改不合理部分。
- 采用设计模式实战,注意模式之间的关联和配合。
1.1.6 学习态度与方法
寻找和总结经常发生变化的场所。
1.2 思想与分类
1.2.1 软件开发思想
- 基本思想
(1)需求分析、架构设计,需求文档,规划设计文档。
(2)划分模块(子系统),类划分,确定接口,迭代过程。
(3)可维护性和可扩展性。降低模块之间的耦合度(解耦)。
- 与微服务架构的区别
微服务器从功能上拆分成多个小程序,彼此之间通过架构方式,配合起来共同实现业务需求。
1.2.2 设计模式分类
设计模式分类 |
设计模式名称 |
行为型模式 |
模板方法(Template Method)模式 |
策略(Strategy)模式 |
观察者(Observer)模式 |
命令(Command)模式 |
迭代器(Iterator)模式 |
状态(State)模式 |
中介者(Mediator)模式 |
备忘录(Memento)模式 |
责任链(Chain Of Responsibility)模式 |
访问者(Visitor)模式 |
解释器(Interpreter)模式 |
创建型模式 |
简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 |
原型(Prototype)模式 |
建造者(Builder)模式 |
单例(Singleton)模式 |
结构型模式 |
装饰(Decorator)模式 |
外观(Facade)模式 |
组合(Composite)模式 |
亨元(Flyweight)模式 |
代理(Proxy)模式 |
适配器(Adapter)模式 |
桥接(Bridge)模式 |
(1)行为型模式。关注对象行为或交互,涉及算法和对象的职责分配。通过对象组合,描述一组对象如何协作完成任务。
(2)创建型模式。对象的创建和使用分离(解耦)。
(3)结构型模式。关注对象间关系,涉及对象组合以获得更灵活的结构。