zoukankan      html  css  js  c++  java
  • 设计模式--状态模式

    当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

    当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式。

    //定义一个抽象状态类

    abstract class State
    {
    public abstract void Handle(Context context);
    }

    //具体状态类A,重写handle方法,切换状态到另一个具体状态。

    class ConcreteStateA : State
    {
    public override void Handle(Context context)
    {
    context.State = new ConcreteStateB();
    }
    }

    //具体状态类B,同状态A类。

    class ConcreteStateB : State
    {
    public override void Handle(Context context)
    {
    context.State = new ConcreteStateA();
    }
    }

    //定义处理类

    class Context
    {
    State state;
    //定义Context的初始状态
    public Context(State state)
    {
    this.state = state;
    }
    //可读写的状态属性,用于读取当前状态和设置新状态。
    public State State
    {
    get { return state; }
    set
    {
    state = value;
    Console.WriteLine("切换的状态:"+state.GetType().Name);
    }
    }
    //对请求做处理,并设置下一状态。
    public void Request()
    {
    state.Handle(this);
    }

    }

    调用:

    Console.WriteLine("当前状态ConcreteStateA");
    Context c = new Context(new ConcreteStateA());
    c.Request();//请求一次就会切换到另一状态
    c.Request();
    c.Request();

  • 相关阅读:
    kill tomcat with netstat
    windows cmd命令显示UTF8设置
    rtx没有振动功能
    手动加载rvm
    RESTful Java client with Apache HttpClient
    Set Up Git on windows also use github
    lcs.py 最长公共子串算法
    如何:对代理使用 IP 切换
    这个博客站点不错
    a case study
  • 原文地址:https://www.cnblogs.com/buzhidaojiaoshenme/p/6727299.html
Copyright © 2011-2022 走看看