简介:
状态模式容许一个对象在其外部状态扭转的时候扭转其行为.这个对象看上去就像是扭转了它的类一样.
应用场景:
对这种有状态的对象编程,传统的解决方案是:将这些所有可能产生的状况全都思考到,而后应用 if-else 语句来做状态判断,再进行不同状况的解决。但当对象的状态很多时,程序会变得很简单。而且减少新的状态要增加新的 if-else 语句,这违反了“开闭准则”,不利于程序的扩大。
当一个对象的行为取决于它的状态,并且它必须在运行时依据状态扭转它的行为时,就能够思考应用状态模式
模式类图:
MM:美眉类
MMState:形象的状态类
ConcreteState1,ConcreteState2,ConcreteState3:具体的状态
模式实例:
如果有一个妹子,依据情绪好坏的不同状态,有不同的行为
1、MM 美眉类
public class MM { String name; MMState state; public MM(String name, MMState state) { this.name = name; this.state = state; } public void smile() { state.smile(); } public void cry() { state.cry(); } public void say() { state.say(); }}
2、MMState 形象的状态类
public abstract class MMState { abstract void smile(); abstract void cry(); abstract void say();}
3、MMHappyState 开心状态类
public class MMHappyState extends MMState { @Override void smile() { System.out.println("开心的微笑"); } @Override void cry() { System.out.println("笑到流眼泪"); } @Override void say() { System.out.println("开心的谈话"); }}
4、MMNervousState 焦虑状态类
public class MMNervousState extends MMState { @Override void smile() { System.out.println("焦虑的微笑"); } @Override void cry() { System.out.println("焦虑的哭"); } @Override void say() { System.out.println("焦虑的谈话"); }}
5、MMSadState 伤心状态类
public class MMSadState extends MMState { @Override void smile() { System.out.println("伤心的微笑"); } @Override void cry() { System.out.println("真哭"); } @Override void say() { System.out.println("哭着说"); }}
6、Test 测试类
public class Test { public static void main(String[] args) { MM mm = new MM("alice", new MMHappyState()); mm.smile(); mm.cry(); mm.say(); }}