简介:
状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样.
使用场景:
对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 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();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。