Skip to content

Commit 3f75622

Browse files
committed
Update Motivation
1 parent 5840e3a commit 3f75622

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
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
@@ -24,6 +26,7 @@
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类型上的访问。

docs/chapter-21-state.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
#### 总结

0 commit comments

Comments
 (0)