如果一个类很多动作都是要根据state不同的状态去是实现的话,把State抽象出来,在具体的State里面实现这个方法。
State模式的方法应该是固定的,根据不同的状态去写这些固定的方法实现。 如果方法是扩展的,State模式是不合适的。
当然如果状态时固定的。直接写Switch
有限状态机(FSM) 状态之间是怎么迁移和变化的。
例子:线程状态迁移图 : 状态是有限的,状态变化是通过Action操作的。
有限状态机和State状态模式是两个东西, 只不过用“有限状态机”这个例子;
例子:
public abstract class MMState { //妹妹的状态
abstract void smile();
abstract void cry();
abstract void say();
}
public class MM {
String name;
MMState state;
public void smile(){
state.smile();
}
public void cry(){
state.cry();
}
public void say(){
state.say();
}
}
public class MMHappyState extends MMState {
@Override
void smile() {
System.out.println("happy smile");
}
@Override
void cry() {
System.out.println("happy cry");
}
@Override
void say() {
System.out.println("happy say");
}
}
public class MMSadState extends MMState {
@Override
void smile() {
System.out.println("sad smile");
}
@Override
void cry() {
System.out.println("sad cry");
}
@Override
void say() {
System.out.println("sad say");
}
}