<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 處理對象的多種狀態及其相互轉換——狀態模式(六) 6 狀態模式總結 狀態模式將一個對象在不同狀態下的不同行為封裝在一個個狀態類中,通過設置不同的狀態對象可以讓環境對象擁有不同的行為,而狀態轉換的細節對于客戶端而言是透明的,方便了客戶端的使用。在實際開發中,狀態模式具有較高的使用頻率,在工作流和游戲開發中狀態模式都得到了廣泛的應用,例如公文狀態的轉換、游戲中角色的升級等。 1. 主要優點 狀態模式的主要優點如下: (1) 封裝了狀態的轉換規則,在狀態模式中可以將狀態的轉換代碼封裝在環境類或者具體狀態類中,可以對狀態轉換代碼進行集中管理,而不是分散在一個個業務方法中。 (2) 將所有與某個狀態有關的行為放到一個類中,只需要注入一個不同的狀態對象即可使環境對象擁有不同的行為。 (3) 允許狀態轉換邏輯與狀態對象合成一體,而不是提供一個巨大的條件語句塊,狀態模式可以讓我們避免使用龐大的條件語句來將業務方法和狀態轉換代碼交織在一起。 (4) 可以讓多個環境對象共享一個狀態對象,從而減少系統中對象的個數。 2. 主要缺點 狀態模式的主要缺點如下: (1) 狀態模式的使用必然會增加系統中類和對象的個數,導致系統運行開銷增大。 (2) 狀態模式的結構與實現都較為復雜,如果使用不當將導致程序結構和代碼的混亂,增加系統設計的難度。 (3) 狀態模式對“開閉原則”的支持并不太好,增加新的狀態類需要修改那些負責狀態轉換的源代碼,否則無法轉換到新增狀態;而且修改某個狀態類的行為也需修改對應類的源代碼。 3. 適用場景 在以下情況下可以考慮使用狀態模式: (1) 對象的行為依賴于它的狀態(如某些屬性值),狀態的改變將導致行為的變化。 (2) 在代碼中包含大量與對象狀態有關的條件語句,這些條件語句的出現,會導致代碼的可維護性和靈活性變差,不能方便地增加和刪除狀態,并且導致客戶類與類庫之間的耦合增強。 練習 > Sunny軟件公司欲開發一款紙牌游戲軟件,在該游戲軟件中用戶角色具有入門級(Primary)、熟練級(Secondary)、高手級(Professional)和骨灰級(Final)四種等級,角色的等級與其積分相對應,游戲勝利將增加積分,失敗則扣除積分。入門級具有最基本的游戲功能play() ,熟練級增加了游戲勝利積分加倍功能doubleScore(),高手級在熟練級基礎上再增加換牌功能changeCards(),骨灰級在高手級基礎上再增加偷看他人的牌功能peekCards()。 試使用狀態模式來設計該系統。 7 練習 (1) 分析如下代碼: ``` class TestXYZ { int behaviour; //Getter and Setter ...... public void handleAll() { if (behaviour == 0) { //do something } else if (behaviour == 1) { //do something } else if (behaviour == 2) { //do something } else if (behaviour == 3) { //do something } ... some more else if ... } } ``` 為了提高代碼的擴展性和健壯性,可以使用( )設計模式來進行重構。 A. Visitor(訪問者) B. Facade(外觀) C. Memento(備忘錄) D. State(狀態) (2) 傳輸門是傳輸系統中的重要裝置。傳輸門具有Open(打開)、Closed(關閉)、Opening(正在打開)、StayOpen(保持打開)、Closing(正在關閉)五種狀態。觸發狀態的轉換事件有click、complete和timeout三種。事件與其相應的狀態轉換如圖7所示。 ![](http://img.my.csdn.net/uploads/201301/20/1358695550_1995.jpg) 圖7 傳輸門響應事件與其狀態轉換圖 試使用狀態模式對傳輸門進行狀態模擬,要求繪制相應的類圖并編程模擬實現。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看