用設計模式的思想來定製Java中的事件

來源:互聯網
上載者:User

隨著JAVA的迅猛發展,JDK版本的不斷更新,JAVA新的事件模型與舊的JDK模型也有了本質的區別,它的事件模型也有了很大的區別。由於現在的編程都是採用事件驅動,所以很有必要瞭解的事件模型,我們下面從定製事件的實際出發來具體討論。

比如你要實現一個定時器類,它的主要功能是在在一定的時間後,啟動具體的處理事件

因此我們可以設計兩個類:定時器類(Timer)和調用類(Clock),對應的USE CASE的順序圖如下:

 

在此有兩個說明:1)根據問題的複雜程度,設計Main類。當問題規模較小的時候,可以將“調用類”指定為Main類;2)在此順序圖中運用了回調(CALLBACK)功能。此功能在C++中的實現是通過指標,而在JAVA中沒有指標的概念。我們在此通過介面(Interface)來實現。在此我們採用通用介面設計樣式[1]的服務介面樣式。

就是為了使類的設計具有可擴充性和可複用性,在類的基礎上增加了介面。為了簡便起見,我們只考慮兩個類的互動。由於介面只包括方法,不包含屬性,所以不能擁有其它對象的引用,因此通用介面的模式只有以下三種:

對象適配器 對象管理器 服務介面的推出事件模式

在此應用中我們用上述的服務介面模式來處理事件。由於事件都有兩個參與者:事件的供應者和使用者,因此在事件處理的具體應用中,它又可以細分為“推出事件模式”和“拉進事件模式”。

回調和介面

我們知道程式設計的一個原則:使保持不變的東西和發生變化的東西分離開來[2]。在此我們使用介面來容納易變的代碼(比如,我們在定時器設定的時間後,觸發某些事件,這些事件應該是由使用者來設定的,是可以變化的)。在JAVA中,介面恰好可以實現回調的功能。因此我們利用回調技術將發生變化的代碼封裝在介面中,而保持不變的代碼則“回調”發生變化的代碼。從而是對象具有不同的表達形式,但卻可以接受相同的參數。

具體實現

結合上述的服務介面模式和回調技術,我們建立如下的架構:

TimerListner 介面包含processEvent()方法,在這個方法中放置當事件發生時,我們需要的動作的代碼。以下是程式的示範代碼:

interface TimerListener{
    public void processEvent();
    }
    public Class Clock implements TimerListener{
    Clock(){
        Timer t=new Timer(this);    //向Timer類登記
    }
    public void processEvent(){
    //你的事件處理的代碼
    }
    }
    class Timer extends Thread {
    private TimerListener tl;
    Timer(TimerListener tl){
    this.tl=tl;
    }
    public void run(){
    while(true){
    sleep(1000);
    tl.processEvent();
    }
    }
    }

參考資料

  • UML對象設計與編程

  • 《JAVA編程思想》
  • 《JAVA2核心技術》
  • 《設計模式》

關於作者

 

唐鹹峰 has authored this article

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.