設計模式學習(三)——觀察者模式

參考書——《HeadFirst設計模式》


主題(subject)+觀察者(observer)=觀察者模式——解釋:主題對象管理某些數據,觀察者已經訂閱主題。當主題內的數據改變,就會通知觀察者。

觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。


在最基礎的觀察者模式中,包括以下四個角色:

  • 被觀察者有一個用來存放觀察者對象的容器,這個容器是被觀察者類的核心,另外還有三個方法:addObserver方法是向這個容器中添加觀察者對象;deleteObserver方法是從容器中移除觀察者對象;notifyObserver方法是依次調用觀察者對象的對應方法。這個角色可以是接口,也可以是抽象類或者具體的類。
  • 觀察者觀察者角色一般是一個接口,它只有一個update方法,在被觀察者狀態發生變化時,這個方法就會被觸發調用。
  • 具體的被觀察者使用這個角色是爲了便於擴展,可以在此角色中定義具體的業務邏輯。
  • 具體的觀察者觀察者接口的具體實現,在這個角色中,將定義被觀察者對象狀態發生變化時所要處理的邏輯。

======================================================================================================

這個設計模式不難,以下是關於觀察者模式的一些周邊討論~

1.在設計具體觀察者時

public class ConcreteObserver implements ObserverI {
	private ConcreteObservable observable;
	
	public ConcreteObserver(ConcreteObservable observable){
		this.observable = observable;
		observable.addObserver(this);
	}

爲什麼要保存ConcreteObservable的引用呢?解釋:這樣做的是爲了當想要不再是觀察者時,如果已經有了對ConcreteObservable的引用會比較方便。P.s:這裏也可以理解爲是一種回調。詳細參考:http://hellosure.iteye.com/blog/1130176


2.典型的觀察者模式,被觀察者者是將信息“推”送給觀察者的。這種方式有好有壞,可以根據具體情況,讓被觀察者提供一些公開的getter方法,讓觀察者“拉”走一些自己所需的信息。

3.還可以使用java內置的觀察者模式  http://www.oschina.net/code/explore/jdk16/java/util/Observable.java




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