zoukankan      html  css  js  c++  java
  • 狀態模式

      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();
            }
        }
    }

  • 相关阅读:
    oracle实现自增id
    一些.NET 项目中经常使用的类库
    文件读取是判断是否读取到末尾
    文件操作
    第一个html文件
    HTML标签(持续更新)
    配置tomcat
    判断一个String中是否有指定字符或字符串
    去掉字符串中的某个字符
    把一个activity作为弹窗
  • 原文地址:https://www.cnblogs.com/YzpJason/p/7268933.html
Copyright © 2011-2022 走看看