设计模式——状态,C# 语言范例
来源:互联网 发布:淘宝主图白底图要求 编辑:程序博客网 时间:2024/06/06 04:58
此范例共4个状态,2种操作,没用interface而是用abstract修饰的class实现。
调用:
TransServer ts = new TransServer(); Console.WriteLine(ts.StopServer()); Console.WriteLine(ts.StartServer()); Console.WriteLine(ts.StartServer()); Console.WriteLine(ts.StopServer()); Console.WriteLine(ts.StopServer());
实现:
internal abstract class State { internal TransServer transServer; public abstract ErrorCode StartServer(); public abstract ErrorCode StopServer(); } internal class StoppedState : State { public StoppedState(TransServer ts) { this.transServer = ts; } /// <summary> /// Stopped --> Init --> Worked or Error or Others. /// </summary> /// <returns></returns> public override ErrorCode StartServer() { // 下一个状态是initstate this.transServer.SetState(this.transServer.GetInitState()); // do something... // finishd... // 下一个状态是WorkingState this.transServer.SetState(this.transServer.GetWorkingState()); return ErrorCode.NoError; } /// <summary> /// Do nothing. /// </summary> /// <returns></returns> public override ErrorCode StopServer() { // it was already stopped! return ErrorCode.AlreadyClosed; } } internal class InitState : State { public InitState(TransServer ts) { this.transServer = ts; } /// <summary> /// Do nothing. /// </summary> /// <returns></returns> public override ErrorCode StartServer() { // 正在初始化,不应重复启动。 return ErrorCode.WaitUntilInitialed; } /// <summary> /// Do nothing. /// </summary> /// <returns></returns> public override ErrorCode StopServer() { // 初始化可以被终止吗?? return ErrorCode.WaitUntilInitialed; } } internal class WorkingState : State { /// <summary> /// /// </summary> /// <param name="ts"></param> public WorkingState(TransServer ts) { this.transServer = ts; } /// <summary> /// Do nothing. /// </summary> /// <returns></returns> public override ErrorCode StartServer() { return ErrorCode.AlreadyStarted; } /// <summary> /// Worked --> Stopped or Error or Others. /// </summary> /// <returns></returns> public override ErrorCode StopServer() { // do something... // finished this.transServer.SetState(this.transServer.GetStoppedState()); return ErrorCode.NoError; } } internal class ErrorState : State { public ErrorState(TransServer ts) { this.transServer = ts; } public override ErrorCode StartServer() { return ErrorCode.UnknowError; } public override ErrorCode StopServer() { return ErrorCode.UnknowError; } } public class TransServer { State stoppedState; internal State GetStoppedState() { return stoppedState; } State initState; internal State GetInitState() { return initState; } State workingState; internal State GetWorkingState() { return workingState; } State errorState; internal State GetErrorState() { return errorState; } State state; /// <summary> /// 设置当前状态 /// </summary> internal void SetState(State value) { state = value; } /// <summary> /// 默认构造方法 /// </summary> public TransServer() { stoppedState = new StoppedState(this); initState = new InitState(this); workingState = new WorkingState(this); errorState = new ErrorState(this); state = stoppedState; } public ErrorCode StartServer() { ErrorCode rv = state.StartServer(); return rv; } public ErrorCode StopServer() { ErrorCode rv = state.StopServer(); return rv; } }
/// <summary> /// 错误码 /// </summary> public enum ErrorCode { NoError = 0, AlreadyClosed, WaitUntilInitialed, AlreadyStarted, UnknowError, }
- 设计模式——状态,C# 语言范例
- C#设计模式——状态模式
- C#设计模式之21——状态模式
- C#设计模式——状态模式(State Pattern)
- [设计模式] 状态模式-C#
- 【C#设计模式-状态模式】
- 设计模式—状态模式
- 设计模式—状态模式
- 设计模式c#语言描述——建造者模式
- 设计模式c#语言描述——适配器模式
- 设计模式c#语言描述——建造者模式
- 设计模式c#语言描述——适配器模式
- 设计模式——状态设计模式
- C语言设计模式:状态模式
- C# 设计模式之 状态模式
- C#设计模式(十五)状态者模式
- c#设计模式-状态模式(1)
- c#设计模式-状态模式(2)
- 根据产品价格或者销售量查询的排序算法-------我所开发程序遇到的问题
- 黑马程序员_内省
- android中的httpdown的工具类
- 打印控件调查
- Lua package 使用
- 设计模式——状态,C# 语言范例
- Introduction to Topic Modeling learning(链)
- android中如何删除布局中的控件
- android中对sd卡的操作
- springMVC工作原理
- IOS自动化的打渠道包
- C的xml编程-libxml2
- 如何成为一名优秀的web前端工程师(前端攻城师)
- 世界上最有用的100个网站