<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 對象間的聯動——觀察者模式(三) 23.3 完整解決方案 為了實現對象之間的聯動,Sunny軟件公司開發人員決定使用觀察者模式來進行多人聯機對戰游戲的設計,其基本結構如圖22-4所示: ![](http://my.csdn.net/uploads/201207/05/1341503929_8319.jpg) 圖22-4 多人聯機對戰游戲結構圖 在圖22-4中,AllyControlCenter充當目標類,ConcreteAllyControlCenter充當具體目標類,Observer充當抽象觀察者,Player充當具體觀察者。完整代碼如下所示: ``` import java.util.*; //抽象觀察類 interface Observer { public String getName(); public void setName(String name); public void help(); //聲明支援盟友方法 public void beAttacked(AllyControlCenter acc); //聲明遭受攻擊方法 } //戰隊成員類:具體觀察者類 class Player implements Observer { private String name; public Player(String name) { this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } //支援盟友方法的實現 public void help() { System.out.println("堅持住," + this.name + "來救你!"); } //遭受攻擊方法的實現,當遭受攻擊時將調用戰隊控制中心類的通知方法notifyObserver()來通知盟友 public void beAttacked(AllyControlCenter acc) { System.out.println(this.name + "被攻擊!"); acc.notifyObserver(name); } } //戰隊控制中心類:目標類 abstract class AllyControlCenter { protected String allyName; //戰隊名稱 protected ArrayList<Observer> players = new ArrayList<Observer>(); //定義一個集合用于存儲戰隊成員 public void setAllyName(String allyName) { this.allyName = allyName; } public String getAllyName() { return this.allyName; } //注冊方法 public void join(Observer obs) { System.out.println(obs.getName() + "加入" + this.allyName + "戰隊!"); players.add(obs); } //注銷方法 public void quit(Observer obs) { System.out.println(obs.getName() + "退出" + this.allyName + "戰隊!"); players.remove(obs); } //聲明抽象通知方法 public abstract void notifyObserver(String name); } //具體戰隊控制中心類:具體目標類 class ConcreteAllyControlCenter extends AllyControlCenter { public ConcreteAllyControlCenter(String allyName) { System.out.println(allyName + "戰隊組建成功!"); System.out.println("----------------------------"); this.allyName = allyName; } //實現通知方法 public void notifyObserver(String name) { System.out.println(this.allyName + "戰隊緊急通知,盟友" + name + "遭受敵人攻擊!"); //遍歷觀察者集合,調用每一個盟友(自己除外)的支援方法 for(Object obs : players) { if (!((Observer)obs).getName().equalsIgnoreCase(name)) { ((Observer)obs).help(); } } } } ``` 編寫如下客戶端測試代碼: ``` class Client { public static void main(String args[]) { //定義觀察目標對象 AllyControlCenter acc; acc = new ConcreteAllyControlCenter("金庸群俠"); //定義四個觀察者對象 Observer player1,player2,player3,player4; player1 = new Player("楊過"); acc.join(player1); player2 = new Player("令狐沖"); acc.join(player2); player3 = new Player("張無忌"); acc.join(player3); player4 = new Player("段譽"); acc.join(player4); //某成員遭受攻擊 Player1.beAttacked(acc); } } ``` 編譯并運行程序,輸出結果如下: ``` 金庸群俠戰隊組建成功! ---------------------------- 楊過加入金庸群俠戰隊! 令狐沖加入金庸群俠戰隊! 張無忌加入金庸群俠戰隊! 段譽加入金庸群俠戰隊! 楊過被攻擊! 金庸群俠戰隊緊急通知,盟友楊過遭受敵人攻擊! 堅持住,令狐沖來救你! 堅持住,張無忌來救你! 堅持住,段譽來救你! ``` 在本實例中,實現了兩次對象之間的聯動,當一個游戲玩家Player對象的beAttacked()方法被調用時,將調用AllyControlCenter的notifyObserver()方法來進行處理,而在notifyObserver()方法中又將調用其他Player對象的help()方法。Player的beAttacked()方法、AllyControlCenter的notifyObserver()方法以及Player的help()方法構成了一個聯動觸發鏈,執行順序如下所示: ``` Player.beAttacked() --> AllyControlCenter.notifyObserver() -->Player.help()。 ```
                  <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>

                              哎呀哎呀视频在线观看