成都市建設(shè)局官網(wǎng)seo優(yōu)化方式包括
???????????????????????????????????????????????????????????????????????????????????????💧 觀察者模式 \color{#FF1493}{觀察者模式} 觀察者模式💧 ?????????
🌷 仰望天空,妳我亦是行人.?
🦄 個(gè)人主頁(yè)——微風(fēng)撞見(jiàn)云的博客🎐
🐳 《數(shù)據(jù)結(jié)構(gòu)與算法》專(zhuān)欄的文章圖文并茂🦕生動(dòng)形象🦖簡(jiǎn)單易學(xué)!歡迎大家來(lái)踩踩~🌺
💧 《Java學(xué)習(xí)筆記》專(zhuān)欄的文章是本人在Java學(xué)習(xí)中總結(jié)的一些知識(shí)點(diǎn)~ 💐
🥣 《每天一點(diǎn)小知識(shí)》專(zhuān)欄的文章可以豐富你的知識(shí)庫(kù),滴水成河~ 🌊
🪁 希望本文能夠給讀者帶來(lái)一定的幫助~🌸文章粗淺,敬請(qǐng)批評(píng)指正!🐥
文章目錄
- 🐳設(shè)計(jì)模式之觀察者模式
- 引言
- 觀察者模式的概念和思想
- 應(yīng)用場(chǎng)景
- 實(shí)現(xiàn)方式
- 使用接口
- 使用 Java 內(nèi)置的觀察者模式
- 使用觀察者模式
- 總結(jié)
- 🐳結(jié)語(yǔ)
🐳設(shè)計(jì)模式之觀察者模式
引言
設(shè)計(jì)模式是軟件開(kāi)發(fā)中重要的概念之一。觀察者模式是設(shè)計(jì)模式中的一種,它用于定義對(duì)象之間的一對(duì)多依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴(lài)者都會(huì)得到通知并自動(dòng)更新。在本文中,我們將深入探討觀察者模式的概念和思想,并介紹觀察者模式的應(yīng)用場(chǎng)景以及常見(jiàn)的代碼實(shí)現(xiàn)方式。
觀察者模式的概念和思想
??💧觀察者模式是一種行為型設(shè)計(jì)模式,它建立了一種對(duì)象之間的依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴(lài)者都會(huì)得到通知并自動(dòng)更新。
??💧觀察者模式的核心思想是將觀察者和被觀察者解耦,使得它們可以獨(dú)立變化。被觀察者維護(hù)一個(gè)觀察者列表,并提供注冊(cè)、注銷(xiāo)和通知觀察者的方法。觀察者通過(guò)注冊(cè)到被觀察者上,實(shí)現(xiàn)對(duì)被觀察者狀態(tài)變化的監(jiān)聽(tīng)。
觀察者模式的應(yīng)用場(chǎng)景以及常見(jiàn)的代碼實(shí)現(xiàn)方式 ↓
應(yīng)用場(chǎng)景
??💧觀察者模式通常在以下場(chǎng)景中使用:
- 當(dāng)一個(gè)對(duì)象的狀態(tài)變化
需要通知其他對(duì)象
,并且不希望與被通知的對(duì)象之間產(chǎn)生緊耦合關(guān)系
時(shí)。 - 當(dāng)一個(gè)對(duì)象的改變
需要同時(shí)改變其他對(duì)象
,并且不知道有多少對(duì)象需要改變
時(shí)。 - 當(dāng)一個(gè)對(duì)象
需要將自己的改變通知給一組對(duì)象
時(shí)。
實(shí)現(xiàn)方式
??💧觀察者模式有多種實(shí)現(xiàn)方式,其中最常見(jiàn)的方式包括使用接口
和使用 Java 內(nèi)置的觀察者模式
實(shí)現(xiàn)。
使用接口
??💧首先,我們定義一個(gè)被觀察者接口 Subject
和一個(gè)觀察者接口 Observer
:
public interface Subject {void registerObserver(Observer observer);void unregisterObserver(Observer observer);void notifyObservers();
}public interface Observer {void update();
}
在上述代碼中,Subject
接口定義了注冊(cè)觀察者、注銷(xiāo)觀察者和通知觀察者的方法。Observer
接口定義了觀察者的 update()
方法,用于接收被觀察者的通知。
??💧接下來(lái),我們實(shí)現(xiàn)具體的被觀察者類(lèi) ConcreteSubject
和 ConcreteObserver
public class ConcreteSubject implements Subject {private List<Observer> observers = new ArrayList<>();private int state;public void registerObserver(Observer observer) {observers.add(observer);}public void unregisterObserver(Observer observer) {observers.remove(observer);}public void notifyObservers() {for (Observer observer : observers) {observer.update();}}public int getState() {return state;}public void setState(int state) {this.state = state;notifyObservers();}
}public class ConcreteObserver implements Observer {private Subject subject;public ConcreteObserver(Subject subject) {this.subject = subject;subject.registerObserver(this);}public void update() {int state = subject.getState();// 處理被觀察者狀態(tài)變化的邏輯}
}
在上述代碼中,ConcreteSubject
類(lèi)實(shí)現(xiàn)了 Subject
接口,它維護(hù)了一個(gè)觀察者列表并實(shí)現(xiàn)了注冊(cè)、注銷(xiāo)和通知觀察者的方法。當(dāng) ConcreteSubject
的狀態(tài)發(fā)生變化時(shí),它會(huì)調(diào)用 notifyObservers()
方法通知所有觀察者。
ConcreteObserver
類(lèi)實(shí)現(xiàn)了 Observer
接口,它在構(gòu)造函數(shù)中注冊(cè)到被觀察者上,并實(shí)現(xiàn)了 update()
方法來(lái)處理被觀察者狀態(tài)變化的邏輯。
使用 Java 內(nèi)置的觀察者模式
??💧Java 提供了內(nèi)置的觀察者模式實(shí)現(xiàn),可以通過(guò) java.util.Observable
類(lèi)和 java.util.Observer
接口來(lái)實(shí)現(xiàn)觀察者模式。
import java.util.Observable;
import java.util.Observer;public class ConcreteSubject extends Observable {private int state;public int getState() {return state;}public void setState(int state) {this.state = state;setChanged();notifyObservers();}
}public class ConcreteObserver implements Observer {public void update(Observable o, Object arg) {int state = ((ConcreteSubject) o).getState();// 處理被觀察者狀態(tài)變化的邏輯}
}
在上述代碼中,ConcreteSubject
類(lèi)繼承自 java.util.Observable
類(lèi),并使用 setChanged()
方法標(biāo)記狀態(tài)變化,然后調(diào)用 notifyObservers()
方法通知觀察者。
ConcreteObserver
類(lèi)實(shí)現(xiàn)了 java.util.Observer
接口,它的 update()
方法會(huì)在被觀察者狀態(tài)變化時(shí)被調(diào)用。
使用觀察者模式
??💧以下是觀察者模式的使用示例:
public class Client {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();ConcreteObserver observer1 = new ConcreteObserver(subject);ConcreteObserver observer2 = new ConcreteObserver(subject);subject.setState(1);// 輸出:處理被觀察者狀態(tài)變化的邏輯// 輸出:處理被觀察者狀態(tài)變化的邏輯}
}
在上述代碼中,我們創(chuàng)建了一個(gè)具體的被觀察者對(duì)象 ConcreteSubject
和兩個(gè)具體的觀察者對(duì)象 ConcreteObserver
。通過(guò)將觀察者注冊(cè)到被觀察者上,當(dāng)被觀察者狀態(tài)發(fā)生變化時(shí),觀察者的 update()
方法會(huì)被調(diào)用。
總結(jié)
????觀察者模式是一種有用的設(shè)計(jì)模式,它能夠?qū)崿F(xiàn)對(duì)象之間的一對(duì)多依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴(lài)者都會(huì)得到通知并自動(dòng)更新。通過(guò)觀察者模式,我們可以實(shí)現(xiàn)松耦合的對(duì)象間通信,提高代碼的靈活性和可維護(hù)性。
🐳結(jié)語(yǔ)
🐬初學(xué)一門(mén)技術(shù)時(shí),總有些許的疑惑,別怕,它們是我們學(xué)習(xí)路上的點(diǎn)點(diǎn)繁星,幫助我們不斷成長(zhǎng)。
🐟積少成多,滴水成河。文章粗淺,希望對(duì)大家有幫助!