<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 處理對象的多種狀態及其相互轉換——狀態模式(四) 4 共享狀態 在有些情況下,多個環境對象可能需要共享同一個狀態,如果希望在系統中實現多個環境對象共享一個或多個狀態對象,那么需要將這些狀態對象定義為環境類的靜態成員對象。 下面通過一個簡單實例來說明如何實現共享狀態: 如果某系統要求兩個開關對象要么都處于開的狀態,要么都處于關的狀態,在使用時它們的狀態必須保持一致,開關可以由開轉換到關,也可以由關轉換到開。 可以使用狀態模式來實現開關的設計,其結構如圖5所示: ![](http://img.my.csdn.net/uploads/201301/20/1358694073_2885.jpg) 圖5 開關及其狀態設計結構圖 開關類Switch代碼如下所示: ``` class Switch { private static State state,onState,offState; //定義三個靜態的狀態對象 private String name; public Switch(String name) { this.name = name; onState = new OnState(); offState = new OffState(); this.state = onState; } public void setState(State state) { this.state = state; } public static State getState(String type) { if (type.equalsIgnoreCase("on")) { return onState; } else { return offState; } } //打開開關 public void on() { System.out.print(name); state.on(this); } //關閉開關 public void off() { System.out.print(name); state.off(this); } } ``` 抽象狀態類如下代碼所示: ``` abstract class State { public abstract void on(Switch s); public abstract void off(Switch s); } ``` 兩個具體狀態類如下代碼所示: ``` //打開狀態 class OnState extends State { public void on(Switch s) { System.out.println("已經打開!"); } public void off(Switch s) { System.out.println("關閉!"); s.setState(Switch.getState("off")); } } //關閉狀態 class OffState extends State { public void on(Switch s) { System.out.println("打開!"); s.setState(Switch.getState("on")); } public void off(Switch s) { System.out.println("已經關閉!"); } } ``` 編寫如下客戶端代碼進行測試: ``` class Client { public static void main(String args[]) { Switch s1,s2; s1=new Switch("開關1"); s2=new Switch("開關2"); s1.on(); s2.on(); s1.off(); s2.off(); s2.on(); s1.on(); } } ``` 輸出結果如下: ``` 開關1已經打開! 開關2已經打開! 開關1關閉! 開關2已經關閉! 開關2打開! 開關1已經打開! ``` 從輸出結果可以得知兩個開關共享相同的狀態,如果第一個開關關閉,則第二個開關也將關閉,再次關閉時將輸出“已經關閉”;打開時也將得到類似結果。
                  <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>

                              哎呀哎呀视频在线观看