Java設計模式之觀察者模式(Observer Pattern)詳解
觀察者模式概念
觀察者模式(Observer Pattern)是一種行為型設計模式,它定義了一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都能夠自動地得到通知并進行更新。這種模式也被稱作是發(fā)布-訂閱(Publish/Subscribe)模式。
觀察者模式角色
觀察者模式包含以下角色:
抽象主題(Subject):它把所有觀察者對象的引用保存在一個聚集里,并提供了增加和刪除觀察者的方法。它可以是接口或抽象類。
具體主題(Concrete Subject):它將有關狀態(tài)存入具體觀察者對象;當它的狀態(tài)發(fā)生改變時,向它的各個觀察者發(fā)出通知。
抽象觀察者(Observer):它是觀察者的抽象類,它定義了一個更新接口,使得在得到主題通知時更新自己。
具體觀察者(Concrete Observer):實現(xiàn)抽象觀察者所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調。
觀察者模式代碼案例
觀察者模式的實現(xiàn)通常采取基于接口的編程方式,下面是一個使用 Java 實現(xiàn)觀察者模式的示例代碼:
// 抽象主題 public interface Subject { void attach(Observer observer); void detach(Observer observer); void notifyObservers(); } // 具體主題 public class ConcreteSubject implements Subject { private List<Observer> observers = new ArrayList<>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyObservers(); } @Override public void attach(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(this); } } } // 抽象觀察者 public interface Observer { void update(Subject subject); } // 具體觀察者 public class ConcreteObserver implements Observer { private int state; @Override public void update(Subject subject) { if (subject instanceof ConcreteSubject) { state = ((ConcreteSubject) subject).getState(); System.out.println("State changed to " + state); } } } // 示例代碼 public class Example { public static void main(String[] args) { // 創(chuàng)建主題和觀察者 ConcreteSubject subject = new ConcreteSubject(); Observer observer1 = new ConcreteObserver(); Observer observer2 = new ConcreteObserver(); // 注冊觀察者 subject.attach(observer1); subject.attach(observer2); // 改變主題狀態(tài),觀察者將收到通知并更新自己的狀態(tài) subject.setState(1); subject.setState(2); // 注銷觀察者 subject.detach(observer2); // 再次改變主題狀態(tài),此時只有 observer1 收到通知 subject.setState(3); } }
上面的示例代碼中,ConcreteSubject 作為具體主題,繼承了 Subject 接口并實現(xiàn)了其中的方法;ConcreteObserver 作為具體觀察者,實現(xiàn)了 Observer 接口中的方法。當主題的狀態(tài)發(fā)生改變時,會調用 notifyObservers() 方法通知所有注冊過的觀察者進行更新。
觀察者模式小結
使用觀察者模式能夠建立松耦合的設計,讓對象之間的依賴關系更加靈活,是一種我們再項目中常用的設計模式。
觀察者模式具有松耦合、可擴展性強等優(yōu)點,使得我們能夠在不影響主題和觀察者之間關系的前提下增加新的觀察者,從而在一定程度上提高了代碼的靈活性和可維護性。其缺點是需要考慮到并發(fā)問題。
到此這篇關于Java設計模式之觀察者模式(Observer Pattern)詳解的文章就介紹到這了,更多相關Java 觀察者模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring + shiro + cas 實現(xiàn)sso單點登錄的示例代碼
本篇文章主要介紹了spring + shiro + cas 實現(xiàn)sso單點登錄的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-09-09SpringBoot 策略模式實現(xiàn)切換上傳文件模式
策略模式是指有一定行動內容的相對穩(wěn)定的策略名稱,這篇文章主要介紹了SpringBoot 策略模式 切換上傳文件模式,需要的朋友可以參考下2023-11-11Spring中@Autowired注解作用在方法上和屬性上說明
這篇文章主要介紹了Spring中@Autowired注解作用在方法上和屬性上說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11Spring?Boot?3?整合?MinIO?實現(xiàn)分布式文件存儲的全過程
本文介紹了如何使用SpringBoot3和MinIO實現(xiàn)分布式文件存儲,通過MinIO的分布式對象存儲系統(tǒng),可以解決傳統(tǒng)單機文件存儲方案在面對大規(guī)模數(shù)據(jù)和高并發(fā)訪問時的不足,文章詳細講解了MinIO的安裝、配置和使用,感興趣的朋友一起看看吧2025-03-03使用JPA支持多參數(shù)列表查詢(參數(shù)可能為空)
這篇文章主要介紹了使用JPA支持多參數(shù)列表查詢(參數(shù)可能為空),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05