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

首頁 > 編程 > C++ > 正文

詳解C++設計模式編程中對狀態模式的運用

2020-05-23 14:07:47
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++設計模式編程中對狀態模式的運用,狀態模式允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類,需要的朋友可以參考下
 

狀態模式:當一個對象的內在狀態發生變化時,允許改變其行為,這個對象看來像是改變了其類。 
狀態模式與策略模式的UML圖幾乎一模一樣,下面列舉了兩者的不同:

(1)可以通過環境類狀態的個數來決定是使用策略模式還是狀態模式。 
(2)策略模式的環境類自己選擇一個具體策略類,具體策略類無須關心環境類;而狀態模式的環境類由于外在因素需要放進一個具體狀態中,以便通過其方法實現狀態的切換,因此環境類和狀態類之間存在一種雙向的關聯關系。 
(3)使用策略模式時,客戶端需要知道所選的具體策略是哪一個,而使用狀態模式時,客戶端無須關心具體狀態,環境類的狀態會根據用戶的操作自動轉換。如果系統中某個類的對象存在多種狀態,不同狀態下行為有差異,而且這些狀態之間可以發生轉換時使用狀態模式;如果系統中某個類的某一行為存在多種實現方式,而且這些實現方式可以互換時使用策略模式。

結構圖

C++,設計模式編程

 

實例:

namespace State_DesignPattern {   using System;   abstract  class State    {     protected  string strStatename;         abstract  public  void Pour();     // do something state-specific here    }     class OpenedState : State    {         public OpenedState ()     {      strStatename =  " Opened " ;    }      override  public  void Pour()     {      Console.WriteLine( " pouring " );      Console.WriteLine( " pouring " );      Console.WriteLine( " pouring " );    }   }      class ClosedState : State    {         public ClosedState()     {      strStatename =  " Closed " ;    }      override  public  void Pour()     {      Console.WriteLine( " ERROR - bottle is closed - cannot pour " );    }   }     class ContextColaBottle    {     public  enum BottleStateSetting {      Closed,      Opened    } ;     // If teh state classes had large amounts of instance data,     // we could dynamically create them as needed - if this demo     // they are tiny, so we just create them as data members      OpenedState openedState =  new OpenedState();    ClosedState closedState =  new ClosedState();     public ContextColaBottle ()     {       // Initialize to closed        CurrentState = closedState;    }       private State CurrentState;         public  void SetState(BottleStateSetting newState)     {       if (newState == BottleStateSetting.Closed)       {        CurrentState = closedState;      }        else        {        CurrentState = openedState;      }     }       public  void Pour()     {      CurrentState.Pour();    }     }      ///  <summary>    ///   Summary description for Client.   ///  </summary>    public  class Client   {     public  static  int Main( string [] args)     {      ContextColaBottle contextColaBottle =  new ContextColaBottle();      Console.WriteLine( " initial state is closed " );      Console.WriteLine( " Now trying to pour " );       contextColaBottle.Pour();      Console.WriteLine( " Open bottle " );      contextColaBottle.SetState(ContextColaBottle.BottleStateSetting.Opened);      Console.WriteLine( " Try to pour again " );      contextColaBottle.Pour();       return  0 ;    }   } } 

適用場景
(1)一個對象的行為取決于它的狀態, 并且它必須在運行時刻根據狀態改變它的行為。
(2)一個操作中含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態。這個狀態通常用一個或多個枚舉常量表示。通常, 有多個操作包含這一相同的條件結構。S t a t e模式將每一個條件分支放入一個獨立的類中。這使得你可以根據對象自身的情況將對象的狀態作為一個對象,這一對象可以不依賴于其他對象而獨立變化。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区av| 欧美福利视频在线| 国产不卡在线观看| 91在线精品视频| 国产成人精品久久二区二区91| 欧美国产亚洲精品久久久8v| 亚洲国产精品va在线看黑人动漫| 日韩免费在线播放| 91久久久亚洲精品| 丝袜美腿亚洲一区二区| 日本久久亚洲电影| 国产精品久久久久7777婷婷| 欧美日韩国产丝袜另类| 在线观看欧美日韩| 日本电影亚洲天堂| 欧美一级电影免费在线观看| 国产成人精品免费久久久久| 亚洲女人天堂色在线7777| 亚洲人线精品午夜| 国产精品久久久久久搜索| 欧美最猛性xxxxx亚洲精品| 成人乱色短篇合集| 在线日韩日本国产亚洲| 国产精品视频一区二区高潮| 一本色道久久88精品综合| 亚洲激情自拍图| 在线看片第一页欧美| 亚洲aa中文字幕| 成人国产精品一区| 精品人伦一区二区三区蜜桃网站| 日韩电影免费在线观看| 久久这里只有精品视频首页| 国产精品www色诱视频| 中文字幕精品久久久久| 久久精品久久精品亚洲人| 亚洲风情亚aⅴ在线发布| 九九热这里只有在线精品视| 日韩成人激情在线| 久久久国产一区二区| 国产在线精品一区免费香蕉| 国产精品日韩精品| 亚洲欧美日韩精品久久亚洲区| 久久精品国产一区| 国产成人福利夜色影视| 成人久久久久久久| 亚洲第一二三四五区| 日韩欧美在线视频免费观看| 国产精品91久久| 精品国产1区2区| 欧美噜噜久久久xxx| 欧美亚洲成人网| 久久久久女教师免费一区| 亚洲欧洲av一区二区| 在线日韩av观看| 亚洲免费av电影| 亚洲国产精品久久久久秋霞蜜臀| 95av在线视频| 深夜福利国产精品| 一级做a爰片久久毛片美女图片| 久久国产精品久久久| 中文字幕成人精品久久不卡| 最近中文字幕2019免费| 国产精品久久久久久久av电影| 91国在线精品国内播放| 欧美成人午夜激情视频| 夜夜躁日日躁狠狠久久88av| 91性高湖久久久久久久久_久久99| 日韩一区在线视频| 91在线观看免费高清| 日本免费一区二区三区视频观看| 日韩在线国产精品| 国产成人精品久久二区二区| 欧美日韩精品中文字幕| 日韩av在线一区二区| 不卡av在线播放| 日本一区二三区好的精华液| 亚洲女同精品视频| 九九热最新视频//这里只有精品| 久久人人97超碰精品888| 久久久爽爽爽美女图片| 亚洲自拍偷拍视频| 久久久久久久久国产| 久久国产精品亚洲| 国产大片精品免费永久看nba| 日韩电视剧免费观看网站| 91亚洲精华国产精华| 欧美精品videos性欧美| 热re91久久精品国99热蜜臀| 精品视频www| 日韩欧美在线网址| 国内自拍欧美激情| 亚洲人成电影网站色…| 欧美老少做受xxxx高潮| 色婷婷久久av| 日韩av高清不卡| 亚洲精品日韩av| 亚洲欧美www| 久久久久久尹人网香蕉| 中文字幕亚洲欧美日韩2019| 久久影视免费观看| 成人国产在线激情| 青青久久aⅴ北条麻妃| 久久精品欧美视频| 亚洲男人天堂视频| 亚洲成人精品久久| 亚洲一区二区日本| 国产一级揄自揄精品视频| 大量国产精品视频| 欧美激情在线有限公司| 精品久久久久久久久国产字幕| 成人午夜在线影院| 91在线观看免费网站| 亚洲自拍偷拍色片视频| 国精产品一区一区三区有限在线| 久久久久久久国产精品视频| 欧美日韩国产一区二区三区| 国产亚洲精品一区二区| 国产在线高清精品| 亚洲精品久久久久| 久久91精品国产91久久跳| 日韩一区二区欧美| 日韩精品高清视频| 欧美亚洲成人xxx| 欧美激情成人在线视频| 2019精品视频| 亚洲精品国产精品乱码不99按摩| 午夜精品一区二区三区在线视频| 亚洲成人久久电影| 日韩av免费在线播放| 亚洲欧洲一区二区三区久久| 尤物yw午夜国产精品视频明星| 国产91精品久久久久久| 日韩精品在线播放| 亚洲大胆美女视频| 国产免费一区二区三区在线能观看| 国产亚洲精品久久久久久牛牛| 播播国产欧美激情| 成人免费视频xnxx.com| 国产一区二区三区视频免费| 国产精品极品在线| 国产精品高潮在线| 欧美精品在线网站| 国产精品久久久久9999| 性金发美女69hd大尺寸| 亚洲精品福利在线| 91免费在线视频| xxxxx成人.com| 91九色单男在线观看| 亚洲一区亚洲二区亚洲三区| 亚洲女人被黑人巨大进入| 一区二区三区视频观看| 亚洲三级免费看| 97热精品视频官网| 精品国产鲁一鲁一区二区张丽| 亚洲欧美日韩久久久久久| 北条麻妃99精品青青久久| 国产成人久久精品| 国产日韩欧美在线观看| 亚洲自拍偷拍在线| 国产精品丝袜久久久久久高清| 国产美女搞久久| 国产精品久久久久久亚洲影视| 欧美一区二区三区免费观看| 亚洲免费视频一区二区|