Skip to content

状态(State)模式 行为型模式

更新: 2023-05-24 11:11:27   字数: 0 字   时长: 0 分钟

允许一个对象在其内部状态发生改变时改变其行为能力。

c#
// 状态模式示例
using System;

// 定义一个状态接口,包含两个方法
public interface IState
{
    void Handle(Context context); // 处理状态的方法
    string GetName(); // 获取状态名称的方法
}

// 定义一个具体状态类,实现IState接口
public class ConcreteStateA : IState
{
    public void Handle(Context context)
    {
        Console.WriteLine("当前状态为:" + GetName());
        context.State = new ConcreteStateB(); // 将状态改为B
    }

    public string GetName()
    {
        return "State A";
    }
}

// 定义另一个具体状态类,实现IState接口
public class ConcreteStateB : IState
{
    public void Handle(Context context)
    {
        Console.WriteLine("当前状态为:" + GetName());
        context.State = new ConcreteStateA(); // 将状态改为A
    }

    public string GetName()
    {
        return "State B";
    }
}

// 定义一个上下文类,包含一个状态对象
public class Context
{
    private IState state;

    public Context(IState state)
    {
        this.state = state;
    }

    public IState State
    {
        get { return state; }
        set { state = value; }
    }

    public void Request()
    {
        state.Handle(this); // 调用状态的处理方法
    }
}

// 测试代码
public class Test
{
    static void Main(string[] args)
    {
        // 创建一个初始状态为A的上下文对象
        Context context = new Context(new ConcreteStateA());

        // 循环调用状态的处理方法,观察状态的变化
        for (int i = 0; i < 5; i++)
        {
            context.Request();
        }

        Console.ReadKey();
    }
}
你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度