状态(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();
}
}