java中的觀察者模式

這是在學習swing組件的事件觸發的過程中學習的 

 

觀察者模式

//抽象主題

package com.shengsiyuan.observer;

//抽象主題,被觀察者的抽象

public interface Watched

{

       public void addWatcher(Watcher watcher);

       public void removeWatcher(Watcher watcher);

       public void notifyWatchers(String str);

}

 

//具體主題

import java.util.ArrayList;

import java.util.List;

public class ConcreteWatched implements Watched

{

       private List<Watcher> list = new ArrayList<Watcher>();

       @Override

       public void addWatcher(Watcher watcher)

       {

              list.add(watcher);

       }

       @Override

       public void removeWatcher(Watcher watcher)

       {

              list.remove(watcher);

       }

       @Override

       public void notifyWatchers(String str)

       {

              for(Watcher watcher : list)

              {

                     watcher.update(str);

              }

       }

}

 

 

//抽象觀察者

public interface Watcher

{

       public void update(String str);

}

 

 

//具體觀察者

public class ConcreteWatcher implements Watcher

{

       @Override

       public void update(String str)

       {

              System.out.println(str);

       }

}

 

//測試類,測試觀察者模式

public class Test

{

       public static void main(String[] args)

       {

              Watched girl = new ConcreteWatched();

             

              Watcher watcher1 = new ConcreteWatcher();

              Watcher watcher2 = new ConcreteWatcher();

              Watcher watcher3 = new ConcreteWatcher();

             

              girl.addWatcher(watcher1);

              girl.addWatcher(watcher2);

              girl.addWatcher(watcher3);

             

              girl.notifyWatchers("開心,爽");

              girl.removeWatcher(watcher2);

              girl.notifyWatchers("不爽");

       }

}

 

//自個分析:具體主題girl類似於GUI中的組件button,addWatcher()方法類似於addActionListener()方法,wahcher1類似於ActionEvent e中的e對象.另外,其它removeWatcher和notifyWathcers()方法類似於button的其它方法。抽象觀察者類似接口型的事件監聽器,具體觀察者,類似實現類型的適配器。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章