日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java观察者设计模式_Java中的观察者设计模式

發布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java观察者设计模式_Java中的观察者设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java觀察者設計模式

在本教程中,我們將討論Observer設計模式。

觀察者模式有兩個主要方面- 主題和觀察者 。 當我們的系統有多個對象(稱為觀察者)時 ,將使用一個模式,即依賴于一個特定對象( 主體)的狀態 。 所有觀察者都將自己注冊為主題。 每當主題狀態發生變化時,所有這些觀察者都會得到通知。

使用此觀察者模式的一個真實示例是博客訂閱。 如果您訂閱自己喜歡的博客,則它會在有任何更新時立即收到通知。

這樣,讓我們??深入研究概念。

UML表示形式:

我們可以用以下UML表示觀察者設計模式:

我們在哪里:

  • 主題:維護觀察者列表,提供注冊/注銷觀察者的方法。 另外,具有notifyAll()方法可將所有狀態更改通知所有注冊的觀察者
  • SubjectImpl:擴展Subject類功能的類,它保存一個表示其當前狀態的狀態對象。 請注意, 最好有一個不可變的狀態對象,以防止觀察者進行任何無意的更新
  • 觀察者:這是一個帶有update()方法的接口,由Subject調用以將其當前狀態的任何更改通知觀察者
  • ConcreteObserver:這些是實現Observer接口的類,觀察者對象注冊自己以偵聽Subject

博客訂閱示例:

假設我們要在發布新帖子時通知我們的博客訂閱者。 讓我們使用觀察者模式實現它。

為此,我們首先定義Subject類:

public abstract class Subject { ????private List<Observer> observers = new ArrayList<>(); ????public void register(Observer observer) { this .observers.add(observer); } ????public void unregister(Observer observer) { if ( this .observers.contains(observer)) { this .observers.remove(observer); } } ?public void notifyAll() { for (Observer o : observers) { o.update(); } } }

我們將Subject類標記為抽象的原因是我們希望Subject具有至少某種狀態。

現在我們已經實現了Subject超類,讓我們編寫Blog類:

public class Blog extends Subject { ?private String title; private String author; ????public Blog(String title, String author) { this .title = title; this .author = author; } ?public void publish(Post post) { //code to publish a new post ... notifyAll(); } ?public Post getRecentPost() { ... } ?... }

我們的Blog類從Subject擴展而來,并在post ()方法內調用notifyAll()方法,以在文章發布后立即通知所有訂閱者。

實施觀察者:

現在讓我們定義我們的Observer接口和Subscriber類:

public interface Observer { ?void update(); } ? public class Subscriber implements Observer { ?private String name; private Subject subject; ?public Subscriber(String name) { this .name = name; } ????public void subscribeTo(Subject subject) { subject.register( this ); this .subject = subject; } ????public void unsubscribeFrom(Subject subject) { subject.unregister( this ); this .subject = null ; } ?@Override public void update() { if ( this .subject == null ) { System.out.println( "Not yet subscribed!" ); return ; } //get the last published post Post recentPost = this .subject.getRecentPost(); System.out.println( this .name + ", a new post got published: " + recentPost); } }

請注意,博客訂閱者將使用subscribeTo()方法訂閱博客。 用戶訂閱博客后,他/她將自動收到發布的所有新帖子的更新。

測試我們的實施:

讓我們快速測試一下我們的代碼:

//in the main method Subject programmerGirlBlog = new Blog( "ProgrammerGirl" , "Shubhra" ); ? Observer james = new Subscriber( "James" ); Observer selena = new Subscriber( "Selena" ); ? james.subscribeTo(programmerGirlBlog); selena.subscribeTo(programmerGirlBlog); ? Post compositeDesignPattern = new Post( "Composite Design Pattern" ); ? programmerGirlBlog.publish(compositeDesignPattern);

執行上面的代碼后,我們將得到如下輸出:

<span><br /> James,新帖子發表:Composite Design Pattern…<br /> Selena,新帖子發表:Composite Design Pattern…</span>

James, a post got published: Composite Design Pattern ... new post got published: Composite Design Pattern ... Selena, a post got published: Composite Design Pattern ... new post got published: Composite Design Pattern ...

結論:

在本快速教程中,我們學習了如何實現Observer設計模式。 此設計模式用于實現發布者-訂閱者JMS模型。 另外, 類似java.util.EventListener和javax.servlet.http.HttpSessionAttributeListener的類都使用此模式。

而且,很高興知道Java提供了觀察者的基本實現以及分別名為java.util.Observer和java.util.Observable的主題類。

翻譯自: https://www.javacodegeeks.com/2019/09/observer-design-pattern-in-java-3.html

java觀察者設計模式

總結

以上是生活随笔為你收集整理的java观察者设计模式_Java中的观察者设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。