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