状态模式
来源:互联网 发布:数据库百度百科 编辑:程序博客网 时间:2024/05/19 01:06
状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
类图:
代码:
publicclass Context {
private Statestate;
public Context(State state){
this.state=state;
}
public State getState() {
returnstate;
}
publicvoid setState(State state) {
this.state = state;
}
publicvoid request(){
if(state!=null){
state.handle(this);
}
}
}
publicinterface State {
void handle(Context context);
}
publicclass ConcreteStateAimplements State{
@Override
publicvoid handle(Context context) {
context.setState(new ConcreteStateB());
System.out.println("状态非常好!!");
}
}
publicclass ConcreteStateBimplements State{
@Override
publicvoid handle(Context context) {
context.setState(new ConcreteStateC());
System.out.println("状态一般!!");
}
}
publicclass ConcreteStateCimplements State{
@Override
publicvoid handle(Context context) {
context.setState(new ConcreteStateA());
System.out.println("状态差,补充体力!!!");
}
}
publicstaticvoid main(String[] args) {
Context context=new Context(new ConcreteStateA());
context.request();
context.request();
context.request();
context.request();
}
优点:把不同状态的代码分离,根据状态改变行为。
缺点:状态的顺序决定了,修改,增加和删除状态都比较困难。
当一个对象的行为取决于的状态,并且它必须在运行时根据状态改变它的行为就可以考虑用状态模式。优化一个功能需要多个实现方案。
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- UVA 10069 Distinct Subsequence
- LDA模型学习(代码)
- NSNotificationCenter
- ACdream 某群赛某题 Classification of the species
- 语言模型训练工具SRILM详解
- 状态模式
- Ubuntu 11.10 GCC4.5 GCC4.6无缝切换
- 工作习惯
- Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 问题的解决方法
- 安装qt5后编译运行后有关Qt at-spi的警告
- 契约优先方式编写wsdl + 隐式Header
- 【文章】在安达信的日子
- exit,return,_exit3者的区别
- mysql不写binlog