<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 對象間的聯動——觀察者模式(五) 22.5 觀察者模式與Java事件處理 JDK 1.0及更早版本的事件模型基于職責鏈模式,但是這種模型不適用于復雜的系統,因此在JDK 1.1及以后的各個版本中,事件處理模型采用基于觀察者模式的委派事件模型(DelegationEvent Model, DEM),即一個Java組件所引發的事件并不由引發事件的對象自己來負責處理,而是委派給獨立的事件處理對象負責。 在DEM模型中,目標角色(如界面組件)負責發布事件,而觀察者角色(事件處理者)可以向目標訂閱它所感興趣的事件。當一個具體目標產生一個事件時,它將通知所有訂閱者。事件的發布者稱為事件源(Event Source),而訂閱者稱為事件監聽器(Event Listener),在這個過程中還可以通過事件對象(Event Object)來傳遞與事件相關的信息,可以在事件監聽者的實現類中實現事件處理,因此事件監聽對象又可以稱為事件處理對象。事件源對象、事件監聽對象(事件處理對象)和事件對象構成了Java事件處理模型的三要素。事件源對象充當觀察目標,而事件監聽對象充當觀察者。以按鈕點擊事件為例,其事件處理流程如下: (1) 如果用戶在GUI中單擊一個按鈕,將觸發一個事件(如ActionEvent類型的動作事件),JVM將產生一個相應的ActionEvent類型的事件對象,在該事件對象中包含了有關事件和事件源的信息,此時按鈕是事件源對象; (2) 將ActionEvent事件對象傳遞給事件監聽對象(事件處理對象),JDK提供了專門用于處理ActionEvent事件的接口ActionListener,開發人員需提供一個ActionListener的實現類(如MyActionHandler),實現在ActionListener接口中聲明的抽象事件處理方法actionPerformed(),對所發生事件做出相應的處理; (3) 開發人員將ActionListener接口的實現類(如MyActionHandler)對象注冊到按鈕中,可以通過按鈕類的addActionListener()方法來實現注冊; (4) JVM在觸發事件時將調用按鈕的fireXXX()方法,在該方法內部將調用注冊到按鈕中的事件處理對象的actionPerformed()方法,實現對事件的處理。 使用類似的方法,我們可自定義GUI組件,如包含兩個文本框和兩個按鈕的登錄組件LoginBean,可以采用如圖22-6所示設計方案: ![](http://my.csdn.net/uploads/201207/06/1341504872_7751.jpg)![](http://my.csdn.net/uploads/201207/06/1341504872_7751.jpg) 圖22-6 自定義登錄組件結構圖【省略按鈕、文本框等界面組件】 圖22-6中相關類說明如下: (1) LoginEvent是事件類,它用于封裝與事件有關的信息,它不是觀察者模式的一部分,但是它可以在目標對象和觀察者對象之間傳遞數據,在AWT事件模型中,所有的自定義事件類都是java.util.EventObject的子類。 (2) LoginEventListener充當抽象觀察者,它聲明了事件響應方法validateLogin(),用于處理事件,該方法也稱為事件處理方法,validateLogin()方法將一個LoginEvent類型的事件對象作為參數,用于傳輸與事件相關的數據,在其子類中實現該方法,實現具體的事件處理。 (3) LoginBean充當具體目標類,在這里我們沒有定義抽象目標類,對觀察者模式進行了一定的簡化。在LoginBean中定義了抽象觀察者LoginEventListener類型的對象lel和事件對象LoginEvent,提供了注冊方法addLoginEventListener()用于添加觀察者,在Java事件處理中,通常使用的是一對一的觀察者模式,而不是一對多的觀察者模式,也就是說,一個觀察目標中只定義一個觀察者對象,而不是提供一個觀察者對象的集合。在LoginBean中還定義了通知方法fireLoginEvent(),該方法在Java事件處理模型中稱為“點火方法”,在該方法內部實例化了一個事件對象LoginEvent,將用戶輸入的信息傳給觀察者對象,并且調用了觀察者對象的響應方法validateLogin()。 (4) LoginValidatorA和LoginValidatorB充當具體觀察者類,它們實現了在LoginEventListener接口中聲明的抽象方法validateLogin(),用于具體實現事件處理,該方法包含一個LoginEvent類型的參數,在LoginValidatorA和LoginValidatorB類中可以針對相同的事件提供不同的實現。
                  <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>

                              哎呀哎呀视频在线观看