天天看點

狀态模式

狀态模式

// state pattern -- structural example  

狀态模式
狀态模式

using system;

狀态模式
狀态模式

namespace dofactory.gangoffour.state.structural

狀态模式
狀态模式

...{

狀态模式
狀态模式

  // mainapp test application 

狀态模式
狀态模式

  class mainapp

狀态模式
狀态模式

  ...{

狀态模式

    static void main()

狀态模式
狀态模式

    ...{

狀态模式

      // setup context in a state 

狀态模式

      context c = new context(new concretestatea());

狀态模式
狀态模式

      // issue requests, which toggles state 

狀态模式

      c.request();

狀态模式
狀态模式
狀态模式
狀态模式
狀态模式

      // wait for user 

狀态模式

      console.read();

狀态模式

    }

狀态模式

  }

狀态模式
狀态模式

  // "state" 

狀态模式
狀态模式

  abstract class state

狀态模式
狀态模式
狀态模式

    public abstract void handle(context context);

狀态模式
狀态模式
狀态模式

  // "concretestatea" 

狀态模式
狀态模式

  class concretestatea : state

狀态模式
狀态模式
狀态模式

    public override void handle(context context)

狀态模式
狀态模式
狀态模式

      context.state = new concretestateb();

狀态模式
狀态模式
狀态模式
狀态模式

  // "concretestateb" 

狀态模式
狀态模式

  class concretestateb : state

狀态模式
狀态模式
狀态模式
狀态模式
狀态模式
狀态模式

      context.state = new concretestatea();

狀态模式
狀态模式
狀态模式
狀态模式

  // "context" 

狀态模式
狀态模式

  class context

狀态模式
狀态模式
狀态模式

    private state state;

狀态模式
狀态模式

    // constructor 

狀态模式

    public context(state state)

狀态模式
狀态模式
狀态模式

      this.state = state;

狀态模式
狀态模式
狀态模式

    // property 

狀态模式

    public state state

狀态模式
狀态模式
狀态模式
狀态模式

      get...{ return state; }

狀态模式

      set

狀态模式
狀态模式

      ...{ 

狀态模式

        state = value; 

狀态模式

        console.writeline("state: " + 

狀态模式

          state.gettype().name);

狀态模式

      }

狀态模式
狀态模式
狀态模式

    public void request()

狀态模式
狀态模式
狀态模式

      state.handle(this);

狀态模式
狀态模式
狀态模式

}

狀态模式
狀态模式