兩個介面,一個主題介面(一般包含了註冊觀察者,刪除觀察者,發佈三個方法),一個觀察者介面(一般只要有一個update,但發佈消息時給主題調用). 1.觀察者介面 2.主題發佈者介面 3.觀察者實現 4.主題發佈者實現 5.整合測試,兄弟 結果應該是這樣的,他們都收到了消息. ...
兩個介面,一個主題介面(一般包含了註冊觀察者,刪除觀察者,發佈三個方法),一個觀察者介面(一般只要有一個update,但發佈消息時給主題調用).
1.觀察者介面
public interface MyObserver { public void update(String name); }
2.主題發佈者介面
public interface MySubject { public void addObserver(MyObserver o); public void removeObserver(MyObserver o); public void notifyAllObserver(); }
3.觀察者實現
public class MyObserver1 implements MyObserver{ private MySubject subject; public MyObserver1(MySubject subject){ this.subject=subject; this.subject.addObserver(this); } public void update(String name) { // TODO Auto-generated method stub System.out.println("訂閱者"+this+"收到"+name); } }
4.主題發佈者實現
public class MySubjectImpl implements MySubject { private ArrayList observers; public MySubjectImpl(){ observers=new ArrayList(); } public void addObserver(MyObserver o) { // TODO Auto-generated method stub observers.add(o); } public void removeObserver(MyObserver o) { // TODO Auto-generated method stub int i = observers.indexOf(o); if(i>0){ observers.remove(i); } } public void notifyAllObserver() { // TODO Auto-generated method stub for(int i= 0;i<observers.size();i++){ MyObserver observer = (MyObserver)observers.get(i); observer.update("發佈者"+this+"發佈的消息"); } } }
5.整合測試,兄弟
public class ObserverSubject { public static void main(String[] args) { MySubjectImpl subject=new MySubjectImpl(); MyObserver1 observer=new MyObserver1(subject); MyObserver1 observer1=new MyObserver1(subject); subject.notifyAllObserver(); } }
結果應該是這樣的,他們都收到了消息.