引言
本文主要介紹觀察者模式,它是一種行爲類的設計模式。適合一對多的適用場景。
- 觀察者模式介紹
- 代碼示例
- 總結
一、觀察者模式介紹
觀察者模式是一種對象行爲模式。它定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新
所謂觀察這模式,按照我自己的理解就是打小報告的模式。估計大家都記得我們上小學的時候班裏面總有些人喜歡喝老師打小報告班級裏有點什麼小動靜,老師都會通過打小報告的人獲取到消息。
二、代碼示例
觀察者模式的主要設計四個角色,如下所示:
- 抽象被觀察者;
- 被觀察者實現;
- 抽象觀察者;
- 觀察者實現;
UML類圖如下所示:
抽象被觀察者:
interface ISubject {
List<Observer> addObserver(Observer observer);
void notifyObserver();
}
被觀察者實現:
public class SubjectImpl implements ISubject {
List<Observer> observerList = Lists.newArrayList();
@Override
public List<Observer> addObserver(Observer observer) {
return observerList.add(observer);
}
@Override
public void notifyObserver() {
for(Observer observer : observerList ) {
observer.updateSomething();
}
}
}
抽象觀察者:
interface IObserver{
void updateSomething();
}
觀察者實現:
public class ObserverImpl implements IObserver{
@Override
public void updateSomething() {
System.out.println("被觀察者做了啥,我得做啥");
}
}
使用場景代碼:
public class Main{
public static void main(String[] args) {
IObserver observer = new ObserverImpl();
ISubject subject = new SubjectImpl();
subject.addObserver(observer);
subject.notifyObserver();
}
}
三、總結
觀察者模式使我們在日常項目實踐中比較常用的設計模式,它體現了代碼模塊的高內聚低耦合的特性,我們可以方便的使用它進行代碼擴展。