C# 设计模式-状态(State)
2018-01-10 18:37
441 查看
允许一个对象在其内部状态改变时改变它的行为。
主要组成:
Context-环境,上下文,客户主要使用该类
State-状态父类或接口
ConcreteState-具体状态
相关类:
调用:
结果:
参考资料:《设计模式-可复用面对对象软件的基础》
主要组成:
Context-环境,上下文,客户主要使用该类
State-状态父类或接口
ConcreteState-具体状态
相关类:
using System; namespace State { /// <summary> /// 手机(环境) /// </summary> class TelephoneContext { State telephoneState; public TelephoneContext(State initState) { telephoneState = initState; } public void ChangeState(State state) { telephoneState = state; } public void Close() { telephoneState.Close(this); } public void Open() { telephoneState.Open(this); } public void CurrentState() { telephoneState.CurrentState(); } } /// <summary> /// 状态父类 /// </summary> abstract class State { protected string StateName; //转换状态 public void ChangeState(TelephoneContext telephone, State state) { telephone.ChangeState(state); } //当前状态 public void CurrentState() { Console.WriteLine(StateName); } public abstract void Close(TelephoneContext telephone); public abstract void Open(TelephoneContext telephone); } /// <summary> /// 关机状态 /// </summary> class ClosedState : State { static ClosedState closedState; private ClosedState() { StateName = "关机状态"; } //单件,唯一实例 public static State Instance() { if (closedState == null) { closedState = new ClosedState(); } return closedState; } public override void Close(TelephoneContext telephone) { Console.WriteLine("已经是关机状态"); } public override void Open(TelephoneContext telephone) { Console.WriteLine("开机中..."); ChangeState(telephone, OpenedState.Instance()); } } /// <summary> /// 开机状态 /// </summary> class OpenedState : State { static OpenedState openedState; private OpenedState() { StateName = "开机状态"; } //单件,唯一实例 public static State Instance() { if (openedState== null) { openedState=new OpenedState(); } return openedState; } public override void Close(TelephoneContext telephone) { Console.WriteLine("关机中..."); ChangeState(telephone, ClosedState.Instance()); } public override void Open(TelephoneContext telephone) { Console.WriteLine("已经是开机状态"); } } }
调用:
using System; namespace State { class Program { static void Main(string[] args) { //初始化为关机状态 TelephoneContext telephoneContext = new TelephoneContext(ClosedState.Instance()); //当前状态 telephoneContext.CurrentState(); telephoneContext.Close(); telephoneContext.Open(); Console.WriteLine("***********"); //当前状态 telephoneContext.CurrentState(); telephoneContext.Open(); telephoneContext.Close(); Console.Read(); } } }
结果:
参考资料:《设计模式-可复用面对对象软件的基础》
相关文章推荐
- [导入]C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式.zip(6.24 MB)
- C#设计模式系列:状态模式(State)
- C#面向对象模式设计第二十二讲:State 状态模式(行为型模式)
- 《模式——工程化实现及扩展》(设计模式C# 版)《状态模式 State》——“自我检验" 参考答案
- C#设计模式系列:状态模式(State)
- 设计模式之状态模式(State)摘录
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++学习笔记之十九(State状态模式)
- [设计模式] 状态模式-C#
- 【设计模式基础】行为模式 - 8 -状态(State)
- c#设计模式-状态模式
- 设计模式 笔记 状态模式 State
- 【设计模式】—— 状态模式State
- JAVA设计模式九之状态模式State
- 设计模式C++描述----16.状态(State)模式
- 设计模式C++学习笔记之十九(State状态模式)
- C++设计模式 之 “状态变化” 模式:State、Memento
- 设计模式之(十二、状态模式State)
- Java设计模式——状态模式(State)