1. 程式人生 > >java設計模式十五(觀察者模式)

java設計模式十五(觀察者模式)

java設計模式—觀察者模式

一.概述

在物件之間定義了一對多的依賴,這樣一來,當一個物件改變狀態,依賴它的物件會收到通知並自動更新。這有點像我們的maven,比如maven的pom.xml刪除某個依賴包時,eclipse裡的程式碼就會做出相應的錯誤提示。

二.應用場景

1.微信公眾號服務,釋出訊息時,關注公眾號就可以收到推送訊息
2.微博的訂閱,當我們訂閱了某個人的微博賬號,當這個人釋出了新的訊息,就會通知我們
3.訂閱火車票之後,需要記錄日誌,也需要傳送簡訊
4.事件訊息

三.模式示例:

1.建立被觀察者類

public class ObservableDemo
extends Observable{
private String message = ""; public ObservableDemo(){ } public String getMessage(){ return message; } public void setMessage(String message){ if(!this.message.equals(message)){ this.message = message; setChanged(); //標註已經被更改
this.notifyObservers(message); //通知觀察者資料已被更改 } } }

2.建立觀察者類

public class ObserverDemo implements Observer{

    private String observerName;

    public  ObserverDemo(String observerName) { 
        this.observerName = observerName;
    }

    @Override
    public void
update(Observable o, Object arg) { if(o instanceof ObservableDemo){ System.out.println(observerName + "新訊息:"+arg); } } }

3.模式呼叫

public class Test {
    public static void main(String args[]){
        ObservableDemo observableDemo=new ObservableDemo();
        ObserverDemo A = new ObserverDemo("A");
        ObserverDemo B = new ObserverDemo("B");
        ObserverDemo C = new ObserverDemo("C");
        observableDemo.addObserver(A);
        observableDemo.addObserver(B);
        observableDemo.addObserver(C);

        observableDemo.addObserver(new Observer(){

            @Override
            public void update(Observable o, Object arg) {              
                System.out.println("new Observer");             
            }           
        });     
        observableDemo.setMessage("nihao1"); 
        observableDemo.setMessage("nihao1"); 
    }
}