[英]does the Constructor of an Observer needs the Observable as parameter?
我正在嘗試為我的動漫 GUI 實現一個觀察者。
因此,如果發布了動漫劇集,則通知其他觀察者更新該特定動漫劇集的狀態。
它有效。
我的問題:
我正在嘗試了解觀察者模式,我想知道是否必須將 Observable 作為參數提供給觀察者的構造函數。
因為我在一些教程和網站上看到過,所以我有點困惑。
此致
你的喬治
它不一定需要在創建時了解 observable。
你可以這樣實現(簡單的例子,當然不完美)
class MyObservable {
private ArrayList<MyObserver> observersList = new ArrayList<>();
public void addObserver(MyObserver observer) {
observersList.add(observer)
// OR observer.addObservable(this) , but it is kinda strange one
}
public void onAnimeReleased() {
// Some other logic, release Anime and etc...
notify();
}
private void notify() {
observersList.forEach((obs) -> obs.notify());
}
}
請注意,您還可以持有對不在集合中的觀察者的引用。
private MyObserver animeObserver;
總而言之,通常實現這種模式意味着您需要實現一種將觀察者添加到 observable 並在需要時通知它們的方法。
不必要。 您通常這樣做是為了將 oberver 注冊到 observable。 但是您也可以從外部執行此操作。 使用構造函數方法的優點是你不會錯過在編碼時注冊觀察者,否則兩種方法都很好。
使用構造函數:
public MyObserver(MyObservable myObservable) {
myObservable.register(this);
}
Main code:
MyObservable observable1 = new MyObservable();
Observer obj1 = new MyObserver(observable1 );
Observer obj2 = new MyObserver(observable1 );
Observer obj3 = new MyObserver(observable1 );
像這樣沒有構造函數:
Observer obj1 = new MyObserver();
Observer obj2 = new MyObserver();
Observer obj3 = new MyObserver();
//register observers to the subject
observable1.register(obj1);
observable1.register(obj2);
observable1.register(obj3);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.