--之所以先记状态模式,是因为它和策略有点像,传说中这两个是双胞胎,在出生的时候才能被区分开。先写下来,看看区别是啥。
定义:允许在对象内部状态改变时改变它的行为,对象看起来好像修改了它的类。
优点,
- 将与状态相关的行为定义到具体类中,与具体使用的地儿分割出来。
- 所有状态相关的代码都存在于某个ConcereteState(如图中A,B)中,所以通过定义新的子类很容易地增加新的状态和转换。
缺点:状态多的话,会存在很多的状态类。(如果更改状态流程,代码也要大动啊,但是好在修改的地儿分散出来了,不需要担心影响到什么)
与策略模式的比较。
区别于策略模式的关键是在于模式的【意图】,决定和决策的区别。
- 对状态模式来说,context的行为随时委托给状态对象中的一个,context中的状态在状态对象集合中改变,用以反映出context的内部状态,然后context的行为也会跟着改变。但是context对目前的状态是不知道的。
- 对策略模式来说,通常会指定具体的行为。行为的改变是由context去改变的。