設計模式:觀察者模式

觀察者模式:

Observer模式是行爲模式之一,它的作用是當一個對象的狀態發生變化時,能夠自動通知其他關聯對象,自動刷新對象狀態。

Observer模式提供給關聯對象一種同步通信的手段,使某個對象與依賴她的其它對象之間保持狀態同步。

模式結構:


觀察者模式角色和職責:

Subject(被觀察者):被觀察的對象,當需要被觀察的狀態發生變化時,需要通知隊列中所有觀察者對象。Subject需要維持(添加,刪除,通知)一個觀察者對象的隊列列表。

ConcreateSubject:被觀察者的具體實現。包含一些基本的屬性狀態及其他操作。

package observer;

import java.util.Observable;

/**
 * 被觀察者
 *
 * @author 郭勝
 *
 */
public class Person extends Observable {

    private String name;// 名字
    private String sex;// 性別
    private Integer age;// 年齡

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        this.setChanged();
        this.notifyObservers();
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
        this.setChanged();
        this.notifyObservers();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
        this.setChanged();
        this.notifyObservers();
    }
}


Observer(觀察者):接口或抽象類。當Subject的狀態發生變化時,Observer對象將通過一個callback函數得到通知。

ConcreateObserver:觀察者的具體實現。得到通知後將完成一些具體的業務邏輯處理。

package observer;

import java.util.Observable;
import java.util.Observer;

public class MyObserver implements Observer{

    public void update(Observable o, Object arg) {
        System.out.println("快看,變了,變了,真的變了……");
    }

}

package observer;

public class TestObserver {

    public static void main(String[] args){
        Person p = new Person();
        p.addObserver(new MyObserver());
        p.setName("郭勝");
        p.setAge(18);
        p.setSex("男");
        
        
    }
}



觀察者模式的應用:

偵聽事件驅動程序設計中的外部事件

偵聽/監視某個對象的狀態變化

發佈者/訂閱者(publisher/subscriber)模型中,當一個外部事件(新的產品,消息的出現等等)被觸發時,通知郵件列表中的訂閱者



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