状态模式

1、一种事件会有不同的状态,我们将这些状态都独立出来,用一个类去维护这些状态。

2、定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

3、代码实现:

1)定义一个抽像的类

1  //定义一个抽象的状态类
2     abstract class State
3     {
4         public abstract void Handle();
5     }

2)实现类A\B

复制代码
 1  class ConcreteStateA : State
 2     {
 3         //进入下一状态
 4         public override void Handle(Context context)
 5         {
 6             context.State = new ConcreteStateB();
 7         }
 8     }
 9 
10     class ConcreteStateB : State
11     {
12 
13         public override void Handle(Context context)
14         {
15             context.State = new ConcreteStateA();
16         }
17     }
复制代码

3)要有一个维护实现状态类的子类

复制代码
 1 //Content类 维护一个ConcreteState子类的实例
 2     class Context
 3     {
 4         private State state;
 5         public Context(State state) {
 6             this.state = state;
 7         }
 8         public State State
 9         {
10             get { return state; }
11 
12             set
13             {
14                 state = value;
15                 Console.WriteLine("当前状态:"+state.GetType().Name);
16             }
17         }
18         public void Request()
19         {
20             state.Handle(this);
21         }
22     }
复制代码

4)客户端

1 static void Main(string[] args)
2         {
3             Context c = new  Context(new ConcreteStateA());
4             c.Request();
5             c.Request();
6             Console.Read();
7 
8         }

 

posted @   爱生活,爱代码  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示