2009年4月9日星期四

JavaDesign_022:状态模式 State(摘录+整理)

1. 特点
(1)对象的行为取决于对象的状态属性。
(2)对象的状态在不断地转移。

2. 优点(1)可以很容易地增加新的状态和行为。

3. 缺点(1)造成大量的小的状态类。

4 代码架构(1)抽象状态角色。定义有哪些行为。
(2)
具体状态角色。实现行为。根据需要,状态管理器当作参数传入。
(3)状态管理器(环境)角色。聚合关系包含抽象状态角色。

4.1 进一步思考:谁来定义状态的变化?
(1)如果转换条件固定,应当由状态管理器来定义。(曲子存在编钟里)(2)如果转换条件比较灵活,应当由具体状态角色来决定下一个状态是哪个状态。(曲子分散存在每一个钟里)
(3)交由外部系统来决定。(乐师来决定演奏曲目,现场击打编钟)

4.2 进一步思考:谁来管理状态的生命周期(创建/销毁)?
(1)动态地创建,用多少创建多少。
(2)事先全部创建好。

5. 典型应用场景(1)曾侯乙编钟。击打一只只钟时,编钟的状态从一只钟过渡到另一只钟,其声音(即行为)从一只钟过渡到另一只钟。
(2)状态的切换:A->B->C->D->A,并且还需要逆向状态D->C->B->A->D
(3)代码重构:多重条件转移语句,每个分支代码很多,逻辑复杂,不利于维护。重构后,可以让每个分支生成一个状态类,各自独立地演化。

参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: