File tree Expand file tree Collapse file tree 2 files changed +34
-3
lines changed
Expand file tree Collapse file tree 2 files changed +34
-3
lines changed Original file line number Diff line number Diff line change 22
33### 动机
44
5- 1 . 这本书本身是用Modern C++编写的,我是出于熟悉Modern C++的用法的目的来学习这本书的代码示例。
6- 2 . 因为上过设计模式的课,虽然绝大部分都忘了,但是很容易捡起来,看起来也很熟悉,英文原版我大致浏览了下也不复杂,内容上我应该能hold住。
7- 3 . 在比较嘈杂或短的空闲时间也可以翻译,翻译这件事总是有一点点进度的,而且有时候看其他东西或写代码累了来搞下翻译还是可以的。
5+ 1 . 本书的示例是用C++11、14、17和更高版本的现代C++编写的,有助于熟悉现代C++的语法。
6+ 2 . 设计模式是编程经验的总结,广泛存在于工程实践中,牵扯出非常多的相关内容(比大家熟悉的单例模式为例,可以引出C++11后的多线程内存模型,除了用局部静态变量还可以用Acquire and Release栅栏, Sequentially Consistent 原子操作等无锁方式实现,以及folly中如何在工业实践中实现Singleton来管理多个Singletons),以此为线索梳理所学的知识。
7+ 3 . 打算在原书的基础上补充大量的相关知识,如STL、Boost和folly中的设计模式,举例Leetcode题目中的设计模式,还有融入多线程并发情况下的一些例子。
8+
9+
810
911
1012### TODO
2426- [ ] Chapter16: Iterator。
2527- [x] Chapter19: Nulll Object. 涉及到对代理模式和pimpl编程技法的运用,以及std::optional
2628- [ ] Chapter20: Observer. 已翻译 属性观察者、模板观察者Observer\< T>、可观察Observable\< T> 、依赖问题和取消订阅与线程安全。
29+ - [ ] Chapter21: State. 补充字符串匹配、例子
2730- [ ] Chapter22: Strategy. 翻译了动态策略。静态策略
2831- [x] Chapter23: Template Method. 模版方法模式和策略模式的异同。
2932- [x] Chapter24: Visitor. 入侵式、反射式、经典式的访问者的设计思路,std::visitor在variant类型上的访问。
Original file line number Diff line number Diff line change 1+ ### 第21章: 状态模式
2+
3+ 我必须承认:我的行为是由我的状态支配的。如果我没有足够的睡眠,我会有点累。如果我喝了酒,我就不会开车了。所有这些都是* 状态(states)* ,它们支配着我的行为:我的感受,我能做什么,我不能做什。
4+
5+ 当然,我可以从一种状态转换到另一种状态。我可以去喝杯咖啡,它能让我从瞌睡中清醒过来(我希望如此!)所以我们可以把咖啡当作触发器,让你真正从困倦过渡到清醒。这里,让我笨拙地为你解释一下:
6+
7+ ``` c++
8+ coffee
9+ sleepy ----------> alert
10+ ```
11+
12+ 所以,状态设计模式是一个非常简单的想法:状态控制行为;状态可以改变;唯一的问题是* 谁* 引发了状态的变更。
13+
14+ 基本上有两种方式:
15+
16+ - 状态是带有行为的实际类,这些行为将实际状态从一个转换到另一个
17+ - 状态和转换只是枚举。我们有一个称为` 状态机(state machine) ` 的特殊组件,它执行实际的转换。
18+
19+ 这两种方法都是可行的,但实际上第二种方法是最常见的。这两种我们都会过一遍,但我必须承认我只会简单浏览第一个,因为这不是人们通常做事情的方式。
20+
21+
22+ #### 状态驱动的状态机
23+
24+ #### 手工状态机
25+
26+ #### Boost.MSM 中的状态机
27+
28+ #### 总结
You can’t perform that action at this time.
0 commit comments