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不雅察者形式例子,願望年夜家愛好。