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(); } }
相关文章推荐
- 【java】 java 集合类UML图
- 大整数加减乘除 c实现
- UVA679
- Android程序员的技术要求和学习路线
- 当你不优秀的时候,就让自己具有一些优秀的特质
- Spring装配Bean的过程
- JavaScript面向对象程序设计
- MySQL sql语句优化(转)
- HashTable和HashMap的区别
- 【杭电oj】1495 - 非常可乐(bfs,队列)
- C++中类的多态与虚函数
- jquery插件教程
- Myeclipse10破解步骤
- iOS: 聊聊 Designated Initializer(指定初始化函数)
- 第五周上机实践项目——项目3-时间类(2)
- 创建一个集合图像
- hdu-1247 Hat’s Words(字典树)
- 第七届蓝桥杯C语言B组题目之凑算式
- JavaScript 引用类型
- LeetCode之3---Longest Substring Without Repeating Characters