av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Observable設(shè)計(jì)模式簡(jiǎn)介

譯者 | 蔡柱梁

策劃 | 言征

Observable設(shè)計(jì)模式存在于許多Java API和響應(yīng)式編程中。下面介紹Java中永恒的Observable模式。  

Observable設(shè)計(jì)模式用于許多重要的Java API。一個(gè)眾所周知的示例是使用ActionListenerAPI執(zhí)行操作的JButton。在這個(gè)例子中,我們ActionListener在按鈕上進(jìn)行了監(jiān)聽(tīng)或觀察。單擊按鈕時(shí),ActionListener將執(zhí)行操作。

Observable模式也用于響應(yīng)式編程。在反應(yīng)式應(yīng)用程序中使用觀察者是有道理的,因?yàn)榉磻?yīng)式的本質(zhì)是反應(yīng):當(dāng)另一個(gè)進(jìn)程發(fā)生時(shí),事情就會(huì)發(fā)生。

Observable是一種行為設(shè)計(jì)模式。它的功能是在事件發(fā)生時(shí)執(zhí)行一個(gè)動(dòng)作。兩個(gè)常見(jiàn)的例子是按鈕點(diǎn)擊和通知,但這種模式還有更多用途。

一、Observable模式的一個(gè)例子

在Observable模式中,一個(gè)對(duì)象在執(zhí)行操作時(shí)通知另一個(gè)對(duì)象。為了理解該模式的價(jià)值,讓我們想象一個(gè)需要單擊按鈕并且沒(méi)有通知另一個(gè)對(duì)象的場(chǎng)景,如圖1所示。

請(qǐng)注意,ActionCheck必須每秒檢查一次按鈕?,F(xiàn)在,想象一下,如果我們每秒對(duì)該按鈕進(jìn)行多次操作檢查。您能想象這會(huì)對(duì)您的應(yīng)用程序性能產(chǎn)生什么影響嗎?

讓Do Something按鈕通知ActionCheck.這樣,ActionCheck邏輯就不需要每秒輪詢Do Something按鈕。

二、Observable設(shè)計(jì)模式的元素

在下圖中,請(qǐng)注意觀察者模式的基礎(chǔ)是Observer接口(即觀察的對(duì)象)和Subject(被觀察的對(duì)象)。類NewsletterimplementsSubject和Subscriberimplements Observer。最后,SendEmailMain執(zhí)行Observable設(shè)計(jì)模式。

三、代碼中的Observable模式

Subject接口,也稱為Observableor Publisher,是Observable設(shè)計(jì)模式的基礎(chǔ)?;旧?,它存儲(chǔ)觀察者并在觀察到的動(dòng)作發(fā)生時(shí)立即通知他們??匆幌耂ubject界面。

public interface Subject {

void addSubscriber(Observer observer);
void removeSubscriber(Observer observer);
void notifySubscribers();

}

1.觀察者界面

接口(Observer有時(shí)也稱為Subscriber)由訂閱者實(shí)現(xiàn),它試圖觀察是否已執(zhí)行操作:

public interface Observer {

public void update(String email);

}

2.行動(dòng)中可觀察

讓我們用一個(gè)時(shí)事通訊的例子來(lái)實(shí)現(xiàn)這個(gè)Subject接口。在下面的代碼中,我們存儲(chǔ)我們的觀察者(在本例中為時(shí)事通訊訂閱者),并且當(dāng)他們的電子郵件被添加到訂閱時(shí),每個(gè)訂閱者都會(huì)收到通知。

import java.util.ArrayList;
import java.util.List;

public class Newsletter implements Subject {

protected List observers = new ArrayList<>();
protected String name;
protected String newEmail;

public Newsletter(String name) {
this.name = name;
}

public void addNewEmail(String newEmail) {
this.newEmail = newEmail;
notifySubscribers();
}

@Override

public void addSubscriber(Observer observer) {
observers.add(observer);
}

 @Override

public void removeSubscriber(Observer observer) {
observers.remove(observer);
}

 @Override

public void notifySubscribers() {
observers.forEach(observer -> observer.update(newEmail));
}
}

3.訂閱者

Subscriber類表示訂閱電子郵件時(shí)事通訊的用戶。此類實(shí)現(xiàn)了Observer接口。它是我們將觀察的對(duì)象,以便我們知道是否發(fā)生了事件。

class Subscriber implements Observer {

private String name;

public Subscriber(String name) {
this.name = name;
}

 @Override

public void update(String newEmail) {
System.out.println("Email for: " + name + " | Content:" + newEmail);
}

}

4.發(fā)送郵件主

現(xiàn)在我們有了使Observable模式有效工作的主類。首先,我們將創(chuàng)建Newsletter對(duì)象。然后,我們將添加和刪除訂閱者。最后,我們將添加一封電子郵件并通知訂閱者他們的狀態(tài)。

public class SendEmailMain {

public static void main(String[] args) {
Newsletter newsLetter = new Newsletter("Java Challengers");

Observer duke = new Subscriber("Duke");
Observer juggy = new Subscriber("Juggy");
Observer dock = new Subscriber("Moby Dock");

newsLetter.addSubscriber(duke);
newsLetter.addNewEmail("Lambda Java Challenge");
newsLetter.removeSubscriber(duke);

newsLetter.addSubscriber(juggy);
newsLetter.addSubscriber(dock);
newsLetter.addNewEmail("Virtual Threads Java Challenge");
}

}

這是我們代碼的輸出:

Email for: Duke | Content:Lambda Java Challenge
Email for: Juggy | Content:Virtual Threads Java Challenge
Email for: Moby Dock | Content:Virtual Threads Java Challenge

五、何時(shí)使用Observable模式

當(dāng)一個(gè)動(dòng)作發(fā)生并且需要通知多個(gè)對(duì)象時(shí),最好使用Observable模式而不是Object多次檢查狀態(tài)。想象一下,有 200多個(gè)對(duì)象需要接收通知;在這種情況下,您必須將200乘以檢查發(fā)生的次數(shù)。

通過(guò)使用Observable模式,通知只會(huì)對(duì)所有訂閱者發(fā)生一次。這是一個(gè)巨大的性能提升,也是一種有效的代碼優(yōu)化。此代碼可以輕松擴(kuò)展或更改。

反應(yīng)式編程范式到處都使用Observable模式。如果您曾經(jīng)使用過(guò)Angular,那么您就會(huì)知道使用Observable組件非常普遍。響應(yīng)式組件經(jīng)常被其他事件和邏輯觀察到,當(dāng)滿足特定條件時(shí),組件將執(zhí)行一些動(dòng)作。

六、結(jié)論

以下是關(guān)于Observable設(shè)計(jì)模式,需要記住的要點(diǎn):

Observable使用開(kāi)閉SOLID原則。這意味著我們可以擴(kuò)展addSubscriber和removeSubscriber方法而無(wú)需更改方法名。原因是它接收的是Subject接口而不是直接實(shí)現(xiàn)。

Observer界面觀察發(fā)生在Subject。

Subject也被稱為可觀察對(duì)象,因?yàn)樗且粋€(gè)將被觀察的主題。它也可以稱為發(fā)布器,因?yàn)樗l(fā)布事件。

Observer也被稱為訂閱者,因?yàn)樗嗛喠酥黝}/發(fā)布者。操作發(fā)生時(shí)通知觀察者。

如果我們不使用Observable設(shè)計(jì)模式,訂閱者將不得不不斷輪詢以了解是否發(fā)生了事件,這可能會(huì)對(duì)應(yīng)用程序性能造成嚴(yán)重影響。Observable是一個(gè)更有效的解決方案。


文章名稱:Observable設(shè)計(jì)模式簡(jiǎn)介
轉(zhuǎn)載源于:http://uogjgqi.cn/article/dghhspi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流