<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 功能強大 支持多語言、二開方便! 廣告
                觀察者(Observer)模式定義:在對象之間定義了一對多的依賴關系,這樣一來,當一個對象改變狀態時,依賴它的對象都會收到通知并自動跟新。Java已經提供了對觀察者Observer模式的默認實現, Java對觀察者模式的支持主要體現在Observable類和Observer接口。先看uml模型圖: ## 一、UML模型圖 **![](https://box.kancloud.cn/2016-02-19_56c7196cdf841.jpg)** ## 二、代碼實現 ~~~ /**示例:咱們去菜市場買菜 * * 小商販--主題 */ class Food extends Observable { /**菜名 */ private String name; /**菜價 */ private float price; public Food(String name, float price) { this.name = name; this.price = price; } public String getName() { return name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; /** * 設置菜價的狀態已經被改變 */ this.setChanged(); /** * 通知【所有】正在看菜(已經注冊了)的顧客,然后回調Observer的update方法進行更新 * * 這里可以體現對象的一對多:一個小商販一旦更新價格(即一個對象改變狀態),便會自動通知所有的顧客(依賴它的對象都會收到通知) * 并自動update */ this.notifyObservers(price); } } /** * 顧客 --觀察者 */ class Customer implements Observer { private String name; public Customer(String name) { this.name = name; } public String getName() { return name; } @Override public void update(Observable o, Object arg) { if (o instanceof Food && arg instanceof Float) { Food food = (Food) o; float price = (Float) arg; System.out.println("您好:" + this.name + " ," + food.getName() + "的價格已經發生改變,現在的價格為:" + price + "元/斤"); } } } /** * 客戶端測試類 * * @author Leo */ public class Test { public static void main(String[] args) { Food food = new Food("土豆", 1.0f); Customer zhangsan = new Customer("張三"); Customer lisi = new Customer("李四"); /** * 添加顧客 */ food.addObserver(zhangsan); food.addObserver(lisi); /** * 更新價格 */ food.setPrice(1.5f); } } ~~~ ## 三、應用場景 GUI框架、氣象觀察等 ## 四、小結 在通知所有觀察者之前一定要調用 setChanged()方法來設置被觀察者的狀態已經被改變,這樣notifyObservers()才會回調Observer的update方法進行更新。 以上內容如果有不同的見解或疏忽的地方,還請大家提出寶貴的建議或意見。 最后大家可以試著將下面的uml模型進行具體的代碼實現,如圖:[**附源碼**](http://download.csdn.net/detail/jave_lover/8000095) ![](https://box.kancloud.cn/2016-02-19_56c7196cf2ba9.jpg)
                  <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>

                              哎呀哎呀视频在线观看