1,概念
????????屬于行為模式的一種,定義了一種一對(duì)多的依賴(lài)關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一對(duì)象主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己。
在觀察者模式中有如下角色:
- Subject:抽象主題(抽象被觀察者),抽象主題角色把所有觀察者對(duì)象保存在一個(gè)集合里,每個(gè)主題都可以有任意數(shù)量的觀察者,抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象。
- ConcreteSubject:具體主題(具體被觀察者),該角色將有關(guān)狀態(tài)存入具體觀察者對(duì)象,在具體主題的內(nèi)部狀態(tài)發(fā)生改變時(shí),給所有注冊(cè)過(guò)的觀察者發(fā)送通知。
- Observer:抽象觀察者,是觀察者者的抽象類(lèi),它定義了一個(gè)更新接口,使得在得到主題更改通知時(shí)更新自己。
- ConcrereObserver:具體觀察者,實(shí)現(xiàn)抽象觀察者定義的更新接口,以便在得到主題更改通知時(shí)更新自身的狀態(tài)。
2,使用觀察者模式
? ? ? ? 當(dāng)對(duì)象之間存在一對(duì)多的關(guān)系的時(shí)候就會(huì)使用觀察者模式 ,當(dāng)一個(gè)對(duì)象被修改的時(shí)候,會(huì)通知依賴(lài)他們的對(duì)象。
3,觀察者模式的實(shí)現(xiàn)
????????比如,貓,狗,老鼠三個(gè)對(duì)象。貓是狗和老鼠的被觀察者,老鼠和狗是觀察者?,F(xiàn)在貓叫,然后老鼠跑,狗叫。
? ? ? ? 觀察者模式很好的體現(xiàn)了開(kāi)閉原則。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-552449.html
? ? ? ? 示例代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-552449.html
import java.util.*;
public class ObserverPattern {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer obs1 = new ConcreteObserver1();
Observer obs2 = new ConcreteObserver2();
subject.add(obs1);
subject.add(obs2);
subject.notifyObserver();
}
}
//抽象目標(biāo)
abstract class Subject {
protected List<Observer> observers = new ArrayList<Observer>();
//增加觀察者方法
public void add(Observer observer) {
observers.add(observer);
}
//刪除觀察者方法
public void remove(Observer observer) {
observers.remove(observer);
}
public abstract void notifyObserver(); //通知觀察者方法
}
//具體目標(biāo)
class ConcreteSubject extends Subject {
public void notifyObserver() {
System.out.println("具體目標(biāo)發(fā)生改變...");
System.out.println("--------------");
for (Object obs : observers) {
((Observer) obs).response();
}
}
}
//抽象觀察者
interface Observer {
void response(); //反應(yīng)
}
//具體觀察者1
class ConcreteObserver1 implements Observer {
public void response() {
System.out.println("具體觀察者1作出反應(yīng)!");
}
}
//具體觀察者1
class ConcreteObserver2 implements Observer {
public void response() {
System.out.println("具體觀察者2作出反應(yīng)!");
}
}
到了這里,關(guān)于設(shè)計(jì)模式---觀察者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!