亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 設計模式系列教程-狀態模式

2020-01-24 01:08:43
字體:
來源:轉載
供稿:網友

1. 概述

  當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。

2. 解決的問題

  主要解決的是當控制一個對象狀態轉換的條件表達式過于復雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把復雜的邏輯判斷簡單化。

3. 模式中的角色

  3.1 上下文環境(Context):它定義了客戶程序需要的接口并維護一個具體狀態角色的實例,將與狀態相關的操作委托給當前的Concrete State對象來處理。

  3.2 抽象狀態(State):定義一個接口以封裝使用上下文環境的的一個特定狀態相關的行為。

  3.3 具體狀態(Concrete State):實現抽象狀態定義的接口。

4. 模式解讀

  4.1 狀態模式的類圖

http://files.VeVB.COm/file_images/article/201606/201606010949065.png

  4.2 狀態模式的代碼實現

 /// <summary> /// Context類,維護一個ConcreteState子類的實例,這個實例定義當前的狀態。 /// </summary> public class Context {  private State state;  /// <summary>  /// 定義Context的初始狀態  /// </summary>  /// <param name="state"></param>  public Context(State state)  {   this.state = state;  }  /// <summary>  /// 可讀寫的狀態屬性,用于讀取和設置新狀態  /// </summary>  public State State  {   get { return state; }   set { state = value; }  }  /// <summary>  /// 對請求做處理,并設置下一個狀態  /// </summary>  public void Request()  {   state.Handle(this);  } } /// <summary> /// 抽象狀態類,定義一個接口以封裝與Context的一個特定狀態相關的行為 /// </summary> public abstract class State {  public abstract void Handle(Context context); } /// <summary> /// 具體狀態類,每一個子類實現一個與Context的一個狀態相關的行為 /// </summary> public class ConcreteStateA : State {  /// <summary>  /// 設置ConcreteStateA的下一個狀態是ConcreteStateB  /// </summary>  /// <param name="context"></param>  public override void Handle(Context context)  {   Console.WriteLine("當前狀態是 A.");   context.State = new ConcreteStateB();  } } public class ConcreteStateB : State {  /// <summary>  /// 設置ConcreteStateB的下一個狀態是ConcreteSateA  /// </summary>  /// <param name="context"></param>  public override void Handle(Context context)  {   Console.WriteLine("當前狀態是 B.");   context.State = new ConcreteStateA();  } }

  4.3 客戶端調用

 class Program {  static void Main(string[] args)  {   // 設置Context的初始狀態為ConcreteStateA   Context context = new Context(new ConcreteStateA());   // 不斷地進行請求,同時更改狀態   context.Request();   context.Request();   context.Request();   context.Request();   Console.Read();  } }

  運行結果

http://files.VeVB.COm/file_images/article/201606/201606010949076.png

5. 模式總結

  5.1 優點

    5.1.1 狀態模式將與特定狀態相關的行為局部化,并且將不同狀態的行為分割開來。

    5.1.2 所有狀態相關的代碼都存在于某個ConcereteState中,所以通過定義新的子類很容易地增加新的狀態和轉換。

    5.1.3 狀態模式通過把各種狀態轉移邏輯分不到State的子類之間,來減少相互間的依賴。

  5.2 缺點

    5.2.1 導致較多的ConcreteState子類

  5.3 適用場景

    5.3.1 當一個對象的行為取決于它的狀態,并且它必須在運行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式來。

    5.3.2 一個操作中含有龐大的分支結構,并且這些分支決定于對象的狀態。

6. 應用舉例:電燈有兩個狀態,開(亮)與關(不亮),下面就用狀態模式來實現對電燈的控制。

  6.1 類圖

http://files.VeVB.COm/file_images/article/201606/201606010949077.png

  6.2 實現代碼

 /// <summary> /// 電燈類,對應模式中的Context類 /// </summary> public class Light {  private LightState state;  public Light(LightState state)  {   this.state = state;  }  /// <summary>  /// 按下電燈開關  /// </summary>  public void PressSwich()  {   state.PressSwich(this);  }  public LightState State  {   get { return state; }   set { state = value; }  }  } /// <summary> /// 抽象的電燈狀態類,相當于State類 /// </summary> public abstract class LightState {  public abstract void PressSwich(Light light); } /// <summary> /// 具體狀態類, 開 /// </summary> public class On : LightState {  /// <summary>  /// 在開狀態下,按下開關則切換到關的狀態。  /// </summary>  /// <param name="light"></param>  public override void PressSwich(Light light)  {   Console.WriteLine("Turn off the light.");   light.State = new Off();  } } /// <summary> /// 具體狀態類,關 /// </summary> public class Off: LightState {  /// <summary>  /// 在關狀態下,按下開關則打開電燈。  /// </summary>  /// <param name="light"></param>  public override void PressSwich(Light light)  {   Console.WriteLine("Turn on the light.");   light.State = new On();  } }

  6.3 客戶端代碼

 class Program {  static void Main(string[] args)  {   // 初始化電燈,原始狀態為關   Light light = new Light(new Off());   // 第一次按下開關,打開電燈   light.PressSwich();   // 第二次按下開關,關閉電燈   light.PressSwich();   Console.Read();  } }

  執行結果

http://files.VeVB.COm/file_images/article/201606/201606010949078.png

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久免费| 国产精品啪视频| 欧美伊久线香蕉线新在线| 欧美黄色性视频| 欧洲午夜精品久久久| 日韩av中文字幕在线免费观看| 日韩免费电影在线观看| 日本不卡免费高清视频| 一本一本久久a久久精品牛牛影视| 欧美视频在线看| 91久久中文字幕| 91久久在线观看| 国产精品91一区| 国产日韩欧美自拍| 法国裸体一区二区| 黑人狂躁日本妞一区二区三区| 国产精品久久久久999| 亚洲在线免费视频| 亚洲黄色www| 91精品国产色综合久久不卡98| 亚洲第一av在线| 国内精品久久久久影院 日本资源| 欧美久久久精品| 国产精品视频地址| 亚洲精品永久免费精品| 亚洲黄色www网站| 亚洲欧美日韩一区二区在线| 欧美巨大黑人极品精男| 欧美性生交大片免网| 欧美极品少妇全裸体| 精品国产91久久久久久| 亚洲精品一区二区三区婷婷月| 91精品啪aⅴ在线观看国产| 久久精彩免费视频| 国产精品一区二区电影| 国语自产偷拍精品视频偷| 国产精品福利无圣光在线一区| 性色av一区二区三区| 日韩欧美国产激情| 亚洲国产精久久久久久久| 亚洲国产成人一区| 成人免费观看49www在线观看| 在线日韩中文字幕| 久久久999国产精品| 国产一区香蕉久久| 亚洲综合精品一区二区| 精品丝袜一区二区三区| 亚洲精品一区中文字幕乱码| 黑人极品videos精品欧美裸| 日韩中文有码在线视频| 亚洲激情在线观看视频免费| 欧美成人免费在线观看| 国外色69视频在线观看| 日韩av综合中文字幕| 日韩一区二区三区xxxx| 欧美另类精品xxxx孕妇| 国产网站欧美日韩免费精品在线观看| 欧洲成人免费aa| 日韩在线视频网| 自拍偷拍亚洲区| 国产精品第一区| 精品国产一区av| 亚洲成人三级在线| 欧美一级黑人aaaaaaa做受| 97视频国产在线| 91久热免费在线视频| 中文字幕av一区二区| 国产精品爽爽ⅴa在线观看| 久久亚洲成人精品| 亚洲一区二区三区在线免费观看| 欧美性猛交xxxx免费看| 高清欧美性猛交| 欧美主播福利视频| 亚洲欧美另类自拍| 国产一区二区三区欧美| 欧美理论片在线观看| 亚洲男人天堂2024| 欧美日韩福利视频| 国产精品日韩欧美| 国产精品久久久久7777婷婷| 91欧美精品午夜性色福利在线| 亚洲人成欧美中文字幕| 日韩亚洲国产中文字幕| 日韩毛片中文字幕| 97**国产露脸精品国产| 中文字幕日本欧美| 亚洲人免费视频| 国产一区二区三区在线视频| 中文字幕一区二区三区电影| 国产精品久久久久久久久久| 在线免费观看羞羞视频一区二区| 国产精品永久免费观看| 欧美日韩视频在线| 国产一级揄自揄精品视频| 国产精品大片wwwwww| 97热在线精品视频在线观看| 日韩电影在线观看中文字幕| 久久亚洲综合国产精品99麻豆精品福利| 精品国产网站地址| 国产69精品久久久久99| 色噜噜国产精品视频一区二区| 欧美激情在线狂野欧美精品| 国产日韩视频在线观看| 久久在线免费观看视频| 欧美激情高清视频| 欧美视频二区36p| 亚洲福利视频二区| 国产视频久久久| 亚洲欧美国产精品久久久久久久| 久久综合国产精品台湾中文娱乐网| 欧美精品日韩三级| 亚洲高清久久网| 国产精品视频yy9099| 国产精品亚洲激情| 亚洲午夜色婷婷在线| 日韩精品免费在线视频| 欧美激情喷水视频| 日韩色av导航| 大伊人狠狠躁夜夜躁av一区| 高清欧美性猛交xxxx| 国产精品私拍pans大尺度在线| 欧美一级淫片videoshd| 欧美日韩在线视频观看| 国产精品福利网站| 国产欧美日韩免费| 最近2019中文字幕大全第二页| 亚洲free性xxxx护士hd| 日本精品久久电影| 亚洲天堂免费在线| 91成人在线播放| 91九色视频导航| 色综合五月天导航| 91av在线播放视频| 在线亚洲欧美视频| 国模私拍视频一区| 国产成人在线精品| 欧美精品亚州精品| 日韩人在线观看| 亚洲综合精品伊人久久| 国产精品99蜜臀久久不卡二区| 欧美自拍视频在线| 91精品久久久久久久久不口人| 亚洲免费影视第一页| 精品亚洲国产视频| 欧美成人全部免费| 97精品视频在线| 日韩中文在线中文网在线观看| 日韩欧美在线视频观看| 国产视频亚洲精品| 91免费欧美精品| 精品福利一区二区| 精品国产一区二区三区在线观看| 欧美成人全部免费| 亚洲精品v天堂中文字幕| 92国产精品久久久久首页| 亚洲国产精品yw在线观看| 国自在线精品视频| 中文字幕日韩在线观看| 欧美在线视频观看免费网站| 中文.日本.精品| 亚洲欧美另类中文字幕| 日韩av中文字幕在线播放| 亚洲电影免费在线观看| 亚洲自拍偷拍网址|