java observer模式

來源:互聯網
上載者:User

      重看了一遍《JAVA2 教程(第五版)》, 這本書是屬於大而全的類型的, 所以很多重要的東西都有提到, 但是就是不夠詳細, 以至於一些重要的知識點容易被人忽略掉. 廢話不多說了.

 

Observer       觀察者, 介面, 一個 update 方法

Observable   被觀察者, 類

 

Observer 介面樣本如下:

 

       public interface Observer {

             void update(Observable o, Object arg);        //第二個參數類似於附件一樣的功能

       }

 

Observable 類提供的關鍵方法:

 

        public synchronized void addObserver(Observer o); //添加一個觀察者觀察自己;

 

 

 

 

 

        //這個方法改變被觀察者的狀態. 如果沒有改變被觀察者的狀態, 即使執行 notifyObservers 方法, 觀察者是不會執行任何操作的;

        //如果被觀察者狀態改變, 並且執行 notifyObservers 方法, 被觀察者的狀態將會恢複.

        //由於是 protected  的方法, 如果想公開調用, 就必須在子類覆蓋 setChanged 方法, 並且改為 public.

        protected synchronized  void setChanged();                                           

    

 

        //被觀察者狀態改變後, 使用下面的兩個方法其中的一個, 如果要傳遞資訊給觀察者, 就用第二個, 如果不用, 就用第一個.

        //Object arg 會傳到 Observer 對象 的 update(Observable o, Object arg) 方法的第二個參數.  

        //其實就是 Observable 的 changed 標誌為 true. 則最後兩個方法可以調用所有 Observer 的 update() 方法.     

        public void notifyObservers();

 

        public void notifyObservers(Object arg);

                                            

 

      其實用觀察者和被觀察者來說明他們兩者的關係, 我覺得不是很合適呢, 因為, 在整個過程中, 被觀察者始終是主動的一方呢, 而相對地, 觀察者確實被動的一方, 隨時都可以給被觀察者拋棄. 是不是很奇怪呢, 你會主動找人來監視自己嗎?

 

      在程式中, 往往都是

 

       一個 Observeable 對象對應多個 Observer 對象, 1:N.

 

       Observeable 對象才是主動方, 因為是 Observeable 對象主動 add Observer 對象的, 並且提示他們可以一個一個(順序) 執行 update() 方法.

 

       其實就是一個對象對另外一批的對象的函數調用, 但是使用這個模式可以減少中間的一些代碼, 減少耦合度.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.