程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java不雅察者形式例子

Java不雅察者形式例子

編輯:關於JAVA

Java不雅察者形式例子。本站提示廣大學習愛好者:(Java不雅察者形式例子)文章只能為提供參考,不一定能成為您想要的結果。以下是Java不雅察者形式例子正文


不雅察者形式是一種行動設計形式。不雅察者形式的用處是,當你對一個對象的狀況感興致,願望在它每次產生變更時取得告訴。在不雅察者形式中,不雅察別的一個對象狀況的對象叫做Observer不雅察者,被不雅察的對象叫著Subject被不雅察者。

不雅察者形式 Observer

   不雅察者形式界說了一種一對多的依附關系,讓多個不雅察者對象同時監聽某一個主題對象。

  這個主題對象在狀況上產生變更時,會告訴一切不雅察者對象,讓它們可以或許主動更新本身。

不雅察者形式的構成

  籠統主題腳色:把一切對不雅察者對象的援用保留在一個聚集中,每一個籠統主題腳色都可以有隨意率性數目的不雅察者。籠統主題供給一個接口,可以增長和刪除不雅察者腳色。普通用一個籠統類和接口來完成。

  籠統不雅察者腳色:為一切詳細的不雅察者界說一個接口,在獲得主題的告訴時更新本身。

  詳細主題腳色:在詳細主題外部狀況轉變時,給一切掛號過的不雅察者收回告訴。詳細主題腳色平日用一個子類完成。

   詳細不雅察者腳色:該腳色完成籠統不雅察者腳色所請求的更新接口,以便使自己的狀況與主題的狀況相調和。平日用一個子類完成。假如須要,詳細不雅察者腳色可以保留一個指向詳細主題腳色的援用。

法式實例

  經由過程法式實例來講明不雅察者形式:

  起首界說籠統的不雅察者:

//籠統不雅察者腳色
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)
  {
    // 主動挪用現實上是主題停止挪用的
    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不雅察者形式例子,願望年夜家愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved