<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      狀態(tài)模式

      狀態(tài)(State)模式屬于行為型模式的一種。

      狀態(tài)模式允許對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變其行為,使其看上去就像改變了自身所屬的類一樣。

      狀態(tài)模式是為了把一大串if...else...的邏輯給分拆到不同的狀態(tài)類中,使得將來增加狀態(tài)比較容易。

      狀態(tài)模式的關(guān)鍵設(shè)計(jì)思想在于狀態(tài)切換。簡單的狀態(tài)轉(zhuǎn)換可以直接由調(diào)用方指定,復(fù)雜的狀態(tài)轉(zhuǎn)換可以在內(nèi)部根據(jù)條件觸發(fā)完成。

      狀態(tài)模式建議為對(duì)象的所有可能狀態(tài)新建一個(gè)類,然后將所有狀態(tài)的對(duì)應(yīng)行為抽取到這些類中。

      當(dāng)對(duì)象的行為依賴于其狀態(tài),并且狀態(tài)之間的轉(zhuǎn)換復(fù)雜時(shí);當(dāng)代碼中存在大量的條件語句,并且這些條件語句依賴于對(duì)象的狀態(tài)時(shí),我們都可以使用狀態(tài)模式。

      狀態(tài)模式通常有以下組成部分:

      • 抽象狀態(tài)接口:聲明一個(gè)或多個(gè)方法,用于封裝具體狀態(tài)的行為。
      • 具體狀態(tài)類:實(shí)現(xiàn)抽象狀態(tài)接口,根據(jù)不同的狀態(tài)實(shí)現(xiàn)具體的行為。
      • 環(huán)境類:包含一個(gè)狀態(tài)對(duì)象的引用,并在狀態(tài)改變時(shí)更新其行為。

      我們實(shí)現(xiàn)一個(gè)簡單的狀態(tài)模式。

      1、抽象狀態(tài)類

      // 抽象狀態(tài)類
      public interface State {
          void handle(Context context);
      }

      2、具體狀態(tài)類

      // 具體狀態(tài)類A
      public class ConcreteStateA implements State {
          @Override
          public void handle(Context context) {
              System.out.println("Handling request in State A.");
              context.setState(new ConcreteStateB());
          }
      }
      
      // 具體狀態(tài)類B
      public class ConcreteStateB implements State {
          @Override
          public void handle(Context context) {
              System.out.println("Handling request in State B.");
              context.setState(new ConcreteStateA());
          }
      }

      3、環(huán)境類

      // 環(huán)境類
      public class Context {
          private State state;
      
          public Context(State state) {
              this.state = state;
          }
      
          public void setState(State state) {
              this.state = state;
          }
      
          public void request() {
              state.handle(this);
          }
      }

      4、客戶端

      // 客戶端代碼
      public class StatePatternDemo {
          public static void main(String[] args) {
              Context context = new Context(new ConcreteStateA());
              context.request(); // 輸出: Handling request in State A.
              context.request(); // 輸出: Handling request in State B.
          }
      }

      狀態(tài)模式的優(yōu)缺點(diǎn)。 

      優(yōu)點(diǎn):

      • 封裝狀態(tài)轉(zhuǎn)換:將狀態(tài)轉(zhuǎn)換邏輯封裝在狀態(tài)對(duì)象內(nèi)部,避免了復(fù)雜的條件判斷語句。
      • 易于擴(kuò)展:增加新的狀態(tài)類不會(huì)影響現(xiàn)有代碼,符合開閉原則。
      • 集中狀態(tài)相關(guān)行為:將所有與特定狀態(tài)相關(guān)的行為集中到一個(gè)類中,增強(qiáng)了代碼的可維護(hù)性。

      缺點(diǎn):

      • 增加類和對(duì)象數(shù)量:每個(gè)狀態(tài)都需要一個(gè)具體的狀態(tài)類,可能導(dǎo)致類的數(shù)量增加。
      • 實(shí)現(xiàn)復(fù)雜:模式結(jié)構(gòu)和實(shí)現(xiàn)相對(duì)復(fù)雜,可能增加系統(tǒng)的復(fù)雜度。

      狀態(tài)模式通過將狀態(tài)和行為封裝在獨(dú)立的類中,使得對(duì)象的行為隨著狀態(tài)的變化而變化,增強(qiáng)了系統(tǒng)的靈活性和可維護(hù)性。

      狀態(tài)模式跟策略模式很相似,但有一個(gè)關(guān)鍵性的不同點(diǎn)——在狀態(tài)模式中,特定狀態(tài)是知道其他所有狀態(tài)的存在的,且能觸發(fā)從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)換;而策略則幾乎是完全不知道其他策略的存在的。

      他人犯錯(cuò),常有己過。-- 煙沙九洲

      ?
      posted @ 2025-02-26 23:39  煙沙九洲  閱讀(64)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久久久无码精品亚洲日韩| 欧美极品色午夜在线视频| av人摸人人人澡人人超碰下载| 亚洲综合色婷婷中文字幕| 日本韩国一区二区精品| 亚洲高清WWW色好看美女| 久久影院综合精品| 久久精品国产91精品亚洲 | 亚洲va久久久噜噜噜久久狠狠 | 男人狂桶女人高潮嗷嗷| 白沙| 97se亚洲国产综合自在线观看| 岛国中文字幕一区二区| a片免费视频在线观看| 亚洲精品亚洲人成人网 | 欧美熟妇性XXXX欧美熟人多毛| 国产精品久久久久久久久久| 国产午夜精品久久一二区| 爱性久久久久久久久| 欧美牲交a欧美在线| 欧美人与动欧交视频| 无码激情亚洲一区| 亚洲国产无线乱码在线观看| 最新中文字幕av无码专区不| 亚洲国产精品综合色在线| 91蜜臀国产自产在线观看| 亚洲免费成人av一区| 国产午夜在线观看视频播放| 国产精品久久久尹人香蕉| 黔西县| 97视频精品全国免费观看| 五月丁香啪啪| 欧美寡妇xxxx黑人猛交| 国产真人无码作爱免费视频app| 国产精品麻豆中文字幕| 久久精品国产2020| 日本不卡的一区二区三区| 黑森林福利视频导航| 亚洲欧美中文日韩在线v日本| 成人看的污污超级黄网站免费| 高清自拍亚洲精品二区|