状态模式是根据状态决定行为。如果一个类的很多动作,都要根据不同的State来实现的话。就可以把State抽象出来,在State里面实现这个方法。
假设一个MM,她有三个行为:smile、cry、say,两个状态:HAPPY、SAD。
public class MM { String name; private enum MMState {HAPPY, SAD} MMState state; public void smile() { //switch case } public void cry() { //switch case } public void say() { //switch case }}
状态模式就是看她,现在是开心还是伤心。来判断她是开心的笑,还是苦笑。
使用State模式
1、把MMState抽象成一个抽象类,有三个方法:smile、cry、say
public abstract class MMState { abstract void smile(); abstract void cry(); abstract void say();}
2、MMHappyState 继承 MMState,实现Happy时候的 smile、cry、say
MMSadState 继承 MMState,实现Sad时候的 smile、cry、say
public class MMHappyState extends MMState { @Override void smile() { System.out.println("happy smile"); } @Override void cry() { } @Override void say() { }}
public class MMSadState extends MMState { @Override void smile() { } @Override void cry() { } @Override void say() { }}
State模式结构图:
如果需要扩展方法的话,是不能用State的模式的。因为扩展任何一个方法,所有的状态都要加一遍。
热门跟贴