- 定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。状态模式与责任链模式:责任链责任转移由client控制,状态模式状态转移由各状态类控制,work类中包含一个状态类实例。
- 状态模式与观察者模式:观察者模式是被观察者执行了自己的某个方法(此方法中要添加super.setChanged()和super.notifyObservers(“传递的消息”);)后,所有观察者会执行自己的update方法(client中被观察者实例被观察者.addObserver(观察者))。状态模式是当一个对象的某一个内在状态改变时,会执行自己的某个方法。
- 代码:
public abstract class State {
public abstract void Coding(Work work);
}
public class MorningState extends State{
public void Coding(Work work) {
if(work.getHour()<12){
System.out.println("早上时间,努力编码!");
}else{
work.setCurrentState(new AfternoonState());
work.workCode();
}
}
}
public class AfternoonState extends State{
public void Coding(Work work) {
if(work.getHour()<18){
System.out.println("下午时间,努力编码!");
}else{
work.setCurrentState(new NightState());
work.workCode();
}
}
}
public class NightState extends State{
public void Coding(Work work) {
if(work.getHour()<21){
System.out.println("晚上时间,努力编码!");
}else{
System.out.println("该下班了!");
}
}
}
public class Work {
private int hour; //get set
private State currentState; //get set
public Work(){
this.currentState = new MorningState();
}
public void workCode(){
this.currentState.Coding(this);
}
}
public class Client {
public static void main(String[] args){
Work work = new Work();
work.setHour(9);
work.workCode();
work.setHour(14);
work.workCode();
work.setHour(20);
work.workCode();
work.setHour(23);
work.workCode();
}
}