设计模式读书笔记-状态模式

2016-08-21
读书笔记
  • 定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。状态模式与责任链模式:责任链责任转移由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();
    }
}

Kommentare: