状态模式 开关灯 调用
LightStateContext lsc = new LightStateContext();
Task.Run(() =>
{
while (true)
{
lsc.Run();
Thread.Sleep(1000);
}
});
状态模式开关灯实现
class LightStateContext
{
BaseState CurrentState { set; get; }
public LightStateContext()
{
CurrentState = new LightOffState();
}
public void SetState(BaseState state)
{
CurrentState = state;
}
public BaseState GetState()
{
return CurrentState;
}
public void Run()
{
CurrentState.Turn(this);
}
}
abstract class BaseState
{
protected virtual bool CanToggleState()
{
return true;
}
public abstract void Turn(LightStateContext ctx);
}
class LightOnState : BaseState
{
public override void Turn(LightStateContext ctx)
{
if (CanToggleState())
{
Console.WriteLine($"light is on !");
ctx.SetState(new LightOffState());
}
}
}
class LightOffState : BaseState
{
public override void Turn(LightStateContext ctx)
{
Console.WriteLine($"light is off !");
ctx.SetState(new LightOnState());
}
}
本文介绍了一种使用状态模式实现的开关灯功能。通过定义一个上下文类LightStateContext来管理当前状态,并允许状态改变。具体实现了两种状态:LightOnState和LightOffState,每种状态都有自己的行为。当调用Run方法时,会触发当前状态的行为并切换到另一种状态。
3793

被折叠的 条评论
为什么被折叠?



