1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace ConsoleApplication32
8 {
9 public interface States
10 {
11 void PreProduction(Context context); //上機
12 void PostProduction(Context context);//下機
13 void MaterialImput(Context context);//物料錄入
14 }
15
16 public class Context
17 {
18 public Context(States state)
19 {
20 this.currentState = state;
21 }
22 private States currentState;
23 public States CurrentState
24 {
25 //set
26 //{
27 // currentState = value;
28 //}
29
30 get { return currentState; }
31 set { currentState = value; }
32 }
33
34 /// <summary>
35 /// 执行当前状态
36 /// </summary>
37 public virtual void PreProduction() { this.currentState.PreProduction(this); }
38 public virtual void PostProduction() { this.currentState.PostProduction(this); }
39 public virtual void MaterialImput() { this.currentState.MaterialImput(this); }
40 }
41
42 /// <summary>
43 /// 空閒
44 /// </summary>
45 public class OpenState : States
46 {
47 public void PreProduction(Context context)
48 {
49 Console.WriteLine("FLOW卡上機成功");
50 context.CurrentState = new Opening();
51 }
52
53 public void PostProduction(Context context)
54 {
55
56 Console.WriteLine("FLOW卡還未物料錄入,無法下機");
57
58 }
59
60 public void MaterialImput(Context context)
61 {
62 Console.WriteLine("FLOW卡未上機不能進行物料錄入");
63
64 }
65 }
66
67 /// <summary>
68 /// 完成
69 /// </summary>
70 public class CloseState : States
71 {
72 public void PreProduction(Context context)
73 {
74 Console.WriteLine("FLOW卡正在上機中,無法重複上機");
75
76 }
77
78 public void PostProduction(Context context)
79 {
80 Console.WriteLine("物料已錄入,成功下機");
81 context.CurrentState = new OpenState();
82 }
83
84 public void MaterialImput(Context context)
85 {
86 Console.WriteLine("物料已錄入,無法重複錄入");
87
88 }
89 }
90
91 /// <summary>
92 /// 生產中
93 /// </summary>
94 public class Opening : States
95 {
96 public void PreProduction(Context context)
97 {
98 Console.WriteLine("FLOW卡正在上機中,無法重複上機");
99
100 }
101
102 public void PostProduction(Context context)
103 {
104 Console.WriteLine("物料還未錄入,無法下機");
105 }
106
107 public void MaterialImput(Context context)
108 {
109 Console.WriteLine("FLOW已上機,物料成功錄入");
110 context.CurrentState = new CloseState();
111 }
112 }
113 }
using ConsoleApplication32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
Context contexts = new Context(new OpenState());
contexts.PreProduction();//上機
contexts.PostProduction();//下機
contexts.MaterialImput();//物料錄入
contexts.PreProduction();
contexts.PostProduction();
contexts.MaterialImput();
Console.ReadKey();
}
}
}
