状态模式(学习笔记)
2012-03-30 10:49
267 查看
状态模式
状态模式和策略模式的uml图是一样的!
除了名字之外都一样。
适用场景(引自百度百科):
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
我倒是觉得,这两个模式的思想是一样的,策略模式是把解决问题的策略抽象为一个接口(或抽象类),Context只与接口耦合,从而降低了Context与具体解决方法的耦合,增加了灵活性。这里面,场景不同,策略变成了状态,解决的方式是一样的。
在这个场景里,有一点比较灵活,就是,我们可以把状态的管理工作放到具体的状态类(ConcreteState)中,这样,把状态管理的责任从Context中分摊到了ConcreteState中,解决了庞大分支语句的问题。
Java(伪代码)可以这么写:
Class Context{
Statestate = null;//组合了一个状态接口。
publichandle(){
//把根据状态做出的行为委托给State来做。
state.handle();
}
public Context(){
//构造器构造初始状态,当然,也可以是根据外界传递进来State构造
state= new ConcreteState1(this);
…..
}
public setState(State state){
this.state=state;
}
}
//具体的状态类,注意状态转移
Class ConcreteState1{
Context context;
//构造器
public ConcreteState1(Context context){
this.context= context;
…….
}
//将状态管理分散到具体状态类中
Handle(){
….
….
If(…)//在具体类中,可能根据情况,改变状态
this.setState(newConcreteState2());
….
}
}
把改变状态的任务分担到具体类中,这就是状态模式与策略模式上最大的不同。在状态模式的这个场景下,通常都可以这样灵活的做。
状态模式和策略模式的uml图是一样的!
除了名字之外都一样。
适用场景(引自百度百科):
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
我倒是觉得,这两个模式的思想是一样的,策略模式是把解决问题的策略抽象为一个接口(或抽象类),Context只与接口耦合,从而降低了Context与具体解决方法的耦合,增加了灵活性。这里面,场景不同,策略变成了状态,解决的方式是一样的。
在这个场景里,有一点比较灵活,就是,我们可以把状态的管理工作放到具体的状态类(ConcreteState)中,这样,把状态管理的责任从Context中分摊到了ConcreteState中,解决了庞大分支语句的问题。
Java(伪代码)可以这么写:
Class Context{
Statestate = null;//组合了一个状态接口。
publichandle(){
//把根据状态做出的行为委托给State来做。
state.handle();
}
public Context(){
//构造器构造初始状态,当然,也可以是根据外界传递进来State构造
state= new ConcreteState1(this);
…..
}
public setState(State state){
this.state=state;
}
}
//具体的状态类,注意状态转移
Class ConcreteState1{
Context context;
//构造器
public ConcreteState1(Context context){
this.context= context;
…….
}
//将状态管理分散到具体状态类中
Handle(){
….
….
If(…)//在具体类中,可能根据情况,改变状态
this.setState(newConcreteState2());
….
}
}
把改变状态的任务分担到具体类中,这就是状态模式与策略模式上最大的不同。在状态模式的这个场景下,通常都可以这样灵活的做。
相关文章推荐
- State 状态模式 - Design Patterns 学习笔记 (8)
- java学习笔记-设计模式21(状态模式)
- 设计模式学习笔记-状态模式
- 设计模式C++学习笔记之十九(State状态模式)
- 十二、状态模式——设计模式学习笔记
- 设计模式学习笔记——状态模式
- 设计模式C++学习笔记之十九(State状态模式)
- 【学习笔记javascript设计模式与开发实践(状态模式)----16】
- 设计模式C++学习笔记之十九(State状态模式)
- java学习笔记_状态模式
- 设计模式学习笔记(6) - 状态模式
- 设计模式:状态模式(学习笔记)
- 【学习笔记javascript设计模式与开发实践(状态模式)----16】
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式学习笔记-状态模式
- 【设计模式学习笔记二十一】【行为模式】【状态模式(State)】
- 设计模式学习笔记-状态模式
- 设计模式学习笔记——State状态模式
- 设计模式学习笔记-状态模式