State
行为设计模式
通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时,把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。
//Context
public class Person {
private int hour;
private State state;
public Person(){
state = new MState();
}
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
public void doSomething(){
state.doSomething(this);
state = new MState();
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}
//State
/**
* 状态抽象类
*/
public abstract class State {
public abstract void doSomething(Person person);
}
//ConcreteState
public class MState extends State {
@Override
public void doSomething(Person person) {
if(person.getHour()==7){
System.out.println("吃早餐");
}else{
person.setState(new LState());
person.doSomething();
}
}
}
public class LState extends State {
@Override
public void doSomething(Person person) {
if(person.getHour() == 12){
System.out.println("吃午餐");
}else {
person.setState(new Sstate());
person.doSomething();
}
}
public class Sstate extends State {
@Override
public void doSomething(Person person) {
if(person.getHour()==18){
System.out.println("吃晚饭");
}else {
person.setState(new NoState());
person.doSomething();
}
}
}
public class NoState extends State {
@Override
public void doSomething(Person person) {
System.out.println(person.getHour()+":未定义");
}
}
public class MainClass {
public static void main(String[] args) {
Person person = new Person();
person.setHour(7);
person.doSomething();
person.setHour(12);
person.doSomething();
person.setHour(18);
person.doSomething();
person.setHour(8);
person.doSomething();
person.setHour(7);
person.doSomething();
}
}