状态模式(State)
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象开起来像是改变了其类。
结构图:

1 namespace StatePattern
2 {
3 // 2017.07.08 20:34 by ldb
4 /// <summary>
5 /// 抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。
6 /// </summary>
7 abstract class State
8 {
9 public abstract void Handle(Context context);
10
11 }
12
13 class ConcreateStateA : State
14 {
15 public override void Handle(Context context)
16 {
17 context._State = new ConcreateStateB();
18 }
19 }
20
21 class ConcreateStateB : State
22 {
23 public override void Handle(Context context)
24 {
25 context._State = new ConcreateStateA();
26 }
27 }
28 /// <summary>
29 /// 维护一个ConcreateState子类的实例,这个实例定义当前的状态。
30 /// </summary>
31 class Context
32 {
33 private State state;
34 public Context(State state)//定义context的初始状态
35 {
36 this.state = state;
37 }
38
39 public State _State
40 {
41 get {return state; }
42 set
43 {
44 state = value;
45 Console.WriteLine("当前状态:"+state.GetType().Name);
46 }
47 }
48
49 public void Request()
50 {
51 state.Handle(this);
52 }
53 }
54 class Program
55 {
56 static void Main(string[] args)
57 {
58 Context con = new Context(new ConcreateStateA());
59 con.Request();
60 con.Request();//不断请求,同时更改状态。
61 con.Request();
62 con.Request();
63
64 Console.Read();
65 }
66 }
67 }

浙公网安备 33010602011771号