国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java設計模式之觀察者模式_動力節點Java學院整理

Java設計模式之觀察者模式_動力節點Java學院整理

2020-12-13 18:38zhengzhb Java教程

這篇文章給大家介紹流量java設計模式之觀察者模式,定義對象間一種一對多的依賴關系,使得當每一個對象改變狀態。下面通過類圖和實例代碼給大家介紹java設計模式之觀察者模式,感興趣的朋友一起看看吧

定義:定義對象間一種一對多的依賴關系,使得當每一個對象改變狀態,則所有依賴于它的對象都會得到通知并自動更新。

類型:行為類模式

類圖:

Java設計模式之觀察者模式_動力節點Java學院整理

        在軟件系統中經常會有這樣的需求:如果一個對象的狀態發生改變,某些與它相關的對象也要隨之做出相應的變化。比如,我們要設計一個右鍵菜單的功能,只要在軟件的有效區域內點擊鼠標右鍵,就會彈出一個菜單;再比如,我們要設計一個自動部署的功能,就像eclipse開發時,只要修改了文件,eclipse就會自動將修改的文件部署到服務器中。這兩個功能有一個相似的地方,那就是一個對象要時刻監聽著另一個對象,只要它的狀態一發生改變,自己隨之要做出相應的行動。其實,能夠實現這一點的方案很多,但是,無疑使用觀察者模式是一個主流的選擇。

觀察者模式的結構

在最基礎的觀察者模式中,包括以下四個角色:

  • ?被觀察者:從類圖中可以看到,類中有一個用來存放觀察者對象的Vector容器(之所以使用Vector而不使用List,是因為多線程操作時,Vector在是安全的,而List則是不安全的),這個Vector容器是被觀察者類的核心,另外還有三個方法:attach方法是向這個容器中添加觀察者對象;detach方法是從容器中移除觀察者對象;notify方法是依次調用觀察者對象的對應方法。這個角色可以是接口,也可以是抽象類或者具體的類,因為很多情況下會與其他的模式混用,所以使用抽象類的情況比較多。
  • ?觀察者:觀察者角色一般是一個接口,它只有一個update方法,在被觀察者狀態發生變化時,這個方法就會被觸發調用。
  • ?具體的被觀察者:使用這個角色是為了便于擴展,可以在此角色中定義具體的業務邏輯。
  • ?具體的觀察者:觀察者接口的具體實現,在這個角色中,將定義被觀察者對象狀態發生變化時所要處理的邏輯。

觀察者模式代碼實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
abstract class Subject {
  private Vector<Observer> obs = new Vector<Observer>();
  public void addObserver(Observer obs){
    this.obs.add(obs);
  }
  public void delObserver(Observer obs){
    this.obs.remove(obs);
  }
  protected void notifyObserver(){
    for(Observer o: obs){
      o.update();
    }
  }
  public abstract void doSomething();
}
class ConcreteSubject extends Subject {
  public void doSomething(){
    System.out.println("被觀察者事件反生");
    this.notifyObserver();
  }
}
interface Observer {
  public void update();
}
class ConcreteObserver1 implements Observer {
  public void update() {
    System.out.println("觀察者1收到信息,并進行處理。");
  }
}
class ConcreteObserver2 implements Observer {
  public void update() {
    System.out.println("觀察者2收到信息,并進行處理。");
  }
}
public class Client {
  public static void main(String[] args){
    Subject sub = new ConcreteSubject();
    sub.addObserver(new ConcreteObserver1()); //添加觀察者1
    sub.addObserver(new ConcreteObserver2()); //添加觀察者2
    sub.doSomething();
  }
}

運行結果

被觀察者事件反生

觀察者1收到信息,并進行處理。

觀察者2收到信息,并進行處理。

        通過運行結果可以看到,我們只調用了Subject的方法,但同時兩個觀察者的相關方法都被同時調用了。仔細看一下代碼,其實很簡單,無非就是在Subject類中關聯一下Observer類,并且在doSomething方法中遍歷一下Observer的update方法就行了。

觀察者模式的優點

        觀察者與被觀察者之間是屬于輕度的關聯關系,并且是抽象耦合的,這樣,對于兩者來說都比較容易進行擴展。

        觀察者模式是一種常用的觸發機制,它形成一條觸發鏈,依次對各個觀察者的方法進行處理。但同時,這也算是觀察者模式一個缺點,由于是鏈式觸發,當觀察者比較多的時候,性能問題是比較令人擔憂的。并且,在鏈式結構中,比較容易出現循環引用的錯誤,造成系統假死。 

總結

       Java語言中,有一個接口Observer,以及它的實現類Observable,對觀察者角色常進行了實現。我們可以在jdk的api文檔具體查看這兩個類的使用方法。

       做過VC++、JavaScript DOM或者AWT開發的朋友都對它們的事件處理感到神奇,了解了觀察者模式,就對事件處理機制的原理有了一定的了解了。如果要設計一個事件觸發處理機制的功能,使用觀察者模式是一個不錯的選擇,AWT中的事件處理DEM(委派事件模型Delegation Event Model)就是使用觀察者模式實現的。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品美乳一区二区免费 | 99视频在线| 日韩电影免费观看 | 久久精品国产清自在天天线 | 中文字幕在线视频一区 | 亚洲毛片 | 亚洲+变态+欧美+另类+精品 | 亚洲www啪成人一区二区 | 国产亚洲网站 | 91精品视频在线播放 | 久久首页| 一级片在线观看 | 成人三级视频网站 | aa一级毛片 | 日韩毛片 | 国产综合精品一区二区三区 | av国产精品 | 不卡免费在线视频 | 91精品国产91久久久久久黑人 | 亚洲成av人片在线观看 | 久久久av| 天天躁日日躁bbbbb | 精品在线看 | 国产一区二区在线免费观看 | 亚洲精品成人 | 亚洲欧美网站 | 在线观看一区二区精品 | 精品成人在线 | 性做久久久久久久久 | 国产日韩欧美三级 | 久久99这里只有精品 | 蜜桃tv一区二区三区 | 国产精品久久久久久久久久久久冷 | 日本久久精品 | 国产日产精品一区二区三区四区 | 亚洲综合在线播放 | a级性生活 | 免费a爱片猛猛 | 久久综合另类激情人妖 | 一级毛片免费播放 | 欧洲精品视频在线观看 |