您的位置:首页 > 其它

StatePattern

2016-03-28 23:37 369 查看
class Program
{
static void Main(string[] args)
{
var state = new OpeningState();
var lift = new Lift();
lift.SetListState(state);
lift.Close();
lift.Open();

lift.Run();
lift.Stop();
Console.Read();
}
}
public abstract class LiftState
{
protected Lift Lift;

public void SetLift(Lift lift)
{
this.Lift = lift;
}
public abstract void Open();
public abstract void Close();
public abstract void Run();
public abstract void Stop();
}
public class OpeningState : LiftState
{
public override void Open()
{
Console.WriteLine("电梯打开!");
}

public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close();
}

public override void Run()
{
Console.WriteLine("打开不能运行");
}

public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class ClosingState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
}

public override void Close()
{
Console.WriteLine("电梯关闭!");
}

public override void Run()
{
base.Lift.SetListState(Lift.RuningState);
base.Lift.Open();
}

public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class RuningState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
}

public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close();

}

public override void Run()
{
Console.WriteLine("电梯运行!");
}

public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class StopingState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
}

public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close();
}

public override void Run()
{
base.Lift.SetListState(Lift.RuningState);
base.Lift.Open();
}

public override void Stop()
{
Console.WriteLine("电梯停止!");
}
}

public class Lift
{
public static LiftState OpeningState = new OpeningState();
public static LiftState CloseingState = new ClosingState();
public static LiftState RuningState = new RuningState();
public static LiftState StopingState = new StopingState();

private LiftState _liftState;
public LiftState GetState()
{
return this._liftState;
}

public void SetListState(LiftState state)
{
this._liftState = state;
this._liftState.SetLift(this);
}
public void Open()
{
this._liftState.Open();
}
public void Close()
{
this._liftState.Close();
}
public void Stop()
{
this._liftState.Stop();
}
public void Run()
{
this._liftState.Run();
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: