设计模式系列 - 状态模式

Posted hippiezhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式系列 - 状态模式相关的知识,希望对你有一定的参考价值。

在状态模式中,类的行为时基于它的状态改变而改变。

介绍

状态模式属于行为型模式,通过运行对象在内部状态发生改变时改变它的行为,主要解决的问题是对象的行为严重依赖于它的状态。

类图描述

技术分享图片

代码实现

1、定义状态上下文

    public class Context
    {
        private static IState state;

        public void SetState(IState state) => Context.state = state;

        public IState GetState() => state;
    }

2、定义行为接口

public interface IState
{
    void DoAction(Context context);
}

3、定义行为

public class StartState : IState
{
    public void DoAction(Context context)
    {
        Console.WriteLine("Player is in start state");
        context.SetState(this);
    }

    public override string ToString()
    {
        return "Start State";
    }
}

public class StopState : IState
{
    public void DoAction(Context context)
    {
        Console.WriteLine("Player is in stop state");
        context.SetState(this);
    }

    public override string ToString()
    {
        return "Stop State";
    }
}

4、上层调用

class Program
{
    static void Main(string[] args)
    {
        Context context = new Context();
        IState startState = new StartState();
        startState.DoAction(context);

        Console.WriteLine(context.GetState().ToString());

        IState stopState = new StopState();
        stopState.DoAction(context);
        Console.WriteLine(context.GetState().ToString());

        Console.ReadKey();
    }
}

总结

状态模式封装了转换规则,将每种状态与对应的的行为进行关联,这样可以使多个环境对象共享一个状态对象,从而减少系统中对象的个数。

以上是关于设计模式系列 - 状态模式的主要内容,如果未能解决你的问题,请参考以下文章

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段

设计模式系列——备忘录模式

深入理解JavaScript系列(43):设计模式之状态模式

设计模式之状态模式

状态模式(State)

设计模式12:状态模式