最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java觀察者模式例子

 更新時間:2015年12月09日 14:56:11   投稿:mrr  
這篇文章主要介紹了Java觀察者模式例子的相關(guān)資料,需要的朋友可以參考下

觀察者模式是一種行為設(shè)計模式。觀察者模式的用途是,當(dāng)你對一個對象的狀態(tài)感興趣,希望在它每次發(fā)生變化時獲得通知。在觀察者模式中,觀察另外一個對象狀態(tài)的對象叫做Observer觀察者,被觀察的對象叫著Subject被觀察者。

觀察者模式 Observer

   觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。

  這個主題對象在狀態(tài)上發(fā)生變化時,會通知所有觀察者對象,讓它們能夠自動更新自己。

觀察者模式的組成

  抽象主題角色:把所有對觀察者對象的引用保存在一個集合中,每個抽象主題角色都可以有任意數(shù)量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者角色。一般用一個抽象類和接口來實現(xiàn)。

  抽象觀察者角色:為所有具體的觀察者定義一個接口,在得到主題的通知時更新自己。

  具體主題角色:在具體主題內(nèi)部狀態(tài)改變時,給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個子類實現(xiàn)。

   具體觀察者角色:該角色實現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。通常用一個子類實現(xiàn)。如果需要,具體觀察者角色可以保存一個指向具體主題角色的引用。

程序?qū)嵗?br />

  通過程序?qū)嵗齺碚f明觀察者模式:

  首先定義抽象的觀察者:

//抽象觀察者角色
public interface Watcher
{
  public void update(String str);
} 

  然后定義抽象的主題角色,即抽象的被觀察者,在其中聲明方法(添加、移除觀察者,通知觀察者):

//抽象主題角色,watched:被觀察
public interface Watched
{
  public void addWatcher(Watcher watcher);
  public void removeWatcher(Watcher watcher);
  public void notifyWatchers(String str);
} 

  然后定義具體的觀察者:

public class ConcreteWatcher implements Watcher
{
  @Override
  public void update(String str)
  {
    System.out.println(str);
  }
} 

  之后是具體的主題角色: 

import java.util.ArrayList;
import java.util.List;
public class ConcreteWatched implements Watched
{
  // 存放觀察者
  private List<Watcher> list = new ArrayList<Watcher>();
  @Override
  public void addWatcher(Watcher watcher)
  {
    list.add(watcher);
  }
  @Override
  public void removeWatcher(Watcher watcher)
  {
    list.remove(watcher);
  }
  @Override
  public void notifyWatchers(String str)
  {
    // 自動調(diào)用實際上是主題進行調(diào)用的
    for (Watcher watcher : list)
    {
      watcher.update(str);
    }
  }
} 

  編寫測試類:

public class Test
{
  public static void main(String[] args)
  {
    Watched girl = new ConcreteWatched();
    Watcher watcher1 = new ConcreteWatcher();
    Watcher watcher2 = new ConcreteWatcher();
    Watcher watcher3 = new ConcreteWatcher();
    girl.addWatcher(watcher1);
    girl.addWatcher(watcher2);
    girl.addWatcher(watcher3);
    girl.notifyWatchers("開心");
  }
}

以上所述是小編給大家分享的Java觀察者模式例子,希望大家喜歡。

相關(guān)文章

  • MybatisPlus關(guān)聯(lián)查詢的完美實現(xiàn)方案

    MybatisPlus關(guān)聯(lián)查詢的完美實現(xiàn)方案

    我們在項目開發(fā)的時候,難免會遇到連表查詢的操作,所以下面這篇文章主要給大家介紹了關(guān)于MybatisPlus關(guān)聯(lián)查詢的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • Map之computeIfAbsent使用解讀

    Map之computeIfAbsent使用解讀

    `computeIfAbsent`是Java 8引入的一個Map接口方法,用于簡化在Map中獲取值的操作,如果指定的鍵不存在,它會調(diào)用提供的函數(shù)生成一個新的值,并將其與鍵關(guān)聯(lián),這種方法減少了手動檢查和插入的樣板代碼,使代碼更加簡潔和易讀
    2025-02-02
  • java文件上傳Demo(必看篇)

    java文件上傳Demo(必看篇)

    下面小編就為大家?guī)硪黄猨ava文件上傳Demo(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程

    Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程

    這篇文章主要為大家詳細介紹了Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 詳解Java如何實現(xiàn)加密或者解密PDF文檔

    詳解Java如何實現(xiàn)加密或者解密PDF文檔

    PDF文檔加密是一種用于保護文件內(nèi)容的功能。這篇文章主要介紹了Java實現(xiàn)加密或者解密PDF文檔的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • TreeSet詳解和使用示例_動力節(jié)點Java學(xué)院整理

    TreeSet詳解和使用示例_動力節(jié)點Java學(xué)院整理

    TreeSet是一個有序的集合,它的作用是提供有序的Set集合。這篇文章主要介紹了TreeSet使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Spring BeanPostProcessor接口使用詳解

    Spring BeanPostProcessor接口使用詳解

    本篇文章主要介紹了Spring BeanPostProcessor接口使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java concurrency集合之CopyOnWriteArraySet_動力節(jié)點Java學(xué)院整理

    Java concurrency集合之CopyOnWriteArraySet_動力節(jié)點Java學(xué)院整理

    CopyOnWriteArraySet基于CopyOnWriteArrayList實現(xiàn),其唯一的不同是在add時調(diào)用的是CopyOnWriteArrayList的addIfAbsent(若沒有則增加)方法
    2017-06-06
  • Java并發(fā)編程之ThreadLocal詳解

    Java并發(fā)編程之ThreadLocal詳解

    今天給大家?guī)淼氖荍ava并發(fā)編程的相關(guān)知識,文中對ThreadLocal做了非常詳細的分析及介紹,對小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • IDEA中配置Java反編譯工具javap -c的使用

    IDEA中配置Java反編譯工具javap -c的使用

    本文主要介紹了IDEA中配置Java反編譯工具javap -c的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

略阳县| 防城港市| 贵德县| 荔浦县| 松潘县| 博野县| 邵东县| 南郑县| 平阳县| 信阳市| 太仓市| 镇坪县| 彭山县| 青冈县| 左云县| 富民县| 泰安市| 金湖县| 尖扎县| 龙岩市| 丽江市| 黄浦区| 内江市| 沧州市| 富宁县| 苍南县| 三亚市| 米泉市| 龙州县| 屏东市| 安乡县| 札达县| 洪雅县| 绥滨县| 保靖县| 河间市| 乌兰浩特市| 花莲县| 高尔夫| 寿宁县| 射洪县|