java監聽者模式


1.原理:

  當范圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。

例如:創建一個“人”類Class Person

人擁有吃的方法public void eat(){},我們的目的就是,在這個人吃之前要提醒他洗手,所以我們就要監聽這個人,不管他在什么時候吃,我們都要能夠監聽到並且提醒他洗手,通俗點講這個就是監聽器的作用(在吃之前提醒他洗手)。

2.組成:

   2.1Java的時間監聽機制涉及到三個組件:事件源、事件監聽器、事件對象

   2.2當事件源上發生操作時,它會調用事件監聽器的一個方法,並且調用這個方法時,會傳遞事件對象過來

   2.3事件監聽器是由開發人員編寫,開發人員在事件監聽器中,通過事件對象可以拿到事件源,從而對事件源上的操作進行處理

3.實現:

  3.1創建一個人類,人具有跑、吃的方法  (創建一個事件源)

  3.2創建一個接口用來監視人的跑、吃   (事件監聽器)

  3.3創建一個事件對象,里面用來封裝人(Person)這個對象  (事件對象)

  3.4創建一個測試類,用來測試Java監聽機制

4.源碼下載:http://pan.baidu.com/s/1kUOOoV9

首先創建事件源

復制代碼
//事件源
public class Person {
    //1.1首先定義一個私有的、空的監聽器對象,用來接收傳遞進來的事件監聽器(相當於一個全局變量)
    private PersonListener listener;
    //1.2將傳遞進來的事件監聽器付給1.1中的listener
    public void registerListener(PersonListener personListener){
        this.listener=personListener;
    }
    //1.3判斷listener是否為null,如果不為空,則執行監聽器中的方法,否則照常調用
    public void run(){
        if(listener!=null){
            Even even=new Even(this);
            this.listener.dorun(even);
        }
        System.out.println("人具有跑的方法");
    }
    //1.4和1.3一個道理
    public void eat(){
        if(listener!=null){
            Even even=new Even(this);
            this.listener.doeat(even);
        }
        System.out.println("人具有吃的方法");
    }
}
復制代碼

創建事件監聽器

復制代碼
//事件監聽器
interface PersonListener{
    public void dorun(Even even);
    public void doeat(Even even);
    
}
復制代碼

創建事件對象

復制代碼
//事件對象
class Even{
    private Person person;
    
    public Even(Person person) {
        super();
        this.person = person;
    }

    public Even() {
        super();
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
    
}
復制代碼

  *到這步我們已經把一個完整的Java監聽器做完,下一步我們做測試

  注意:要實現監聽,必須調用它所對應的方法例如下面的registerListener,而且必須要實現監聽器接口PersonListener

復制代碼
public class TestListener {
    
    public static void main(String[] args) {
        Person person=new Person();
        person.registerListener(new MyPersonListener());
        person.run();
        person.eat();
    }
}

//實現監聽器接口中的方法
class MyPersonListener implements PersonListener{

    @Override
    public void dorun(Even even) {
     Person person = even.getPerson();  //拿到事件源 System.out.println("人在跑之前執行的動作"); } @Override public void doeat(Even even) { System.out.println("人在吃之前執行的動作"); } }
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM