觀察者模式理解及demo
阿新 • • 發佈:2019-01-07
最近在學習響應式程式設計RxJava,RxAndroid ,他就是一種基於觀察者模式的以實現更簡潔的非同步操作類庫。
為更好了的理回顧解學習,先回顧一下觀察者模式。
觀察者模式是多中設計模式中的一種,主要包括觀察者和被觀察者兩個個物件,這種設計模式完美的將觀察者和被觀察者的物件隔離,在模組之間畫定了清晰的界限,提高了程式的可維護性和重用行。
舉個栗子:海島上有一個女神,和若干個屌絲,可以把女神作為被觀察者,屌絲作為觀察者,屌絲時時刻刻而觀察女神的一舉一動,女神說渴了,屌絲都知道了。。。
這是栗子實在簡單粗暴,但是大致就那個意思。
現在上程式碼吧
1,首先定義觀察者,這裡定義一個介面,updata方法在觀察到被觀察者有動作之後可以做相應的處理
<pre name="code" class="java">/**
* 觀察者
* Created by legend on 2016/6/16.
*/
public interface Watcher {
public void update(String str);//收到被觀察者的動作後執行的方法
}
2,定義被觀察者介面
/** * 被觀察者 * Created by legend on 2016/6/16. */ public interface Watched { public void addWatcher(Watcher watcher);//新增觀察者 public void removeWatcher(Watcher watcher);//移除觀察者 public void notifyWatcher(String str);//向觀察者發出通知 }
3定義觀察者具體實現類
/**觀察者具體實現類
* Created by legend on 2016/6/16.
*/
public class WatcherObj implements Watcher {
@Override
public void update(String str) {
System.out.println("收到到Watcher的:"+str);
}
}
4定義被觀察者的具體實現類
/** * 被觀察者具體實現類 * Created by legend on 2016/6/16. */ public class WatchedObj implements Watched{ List<Watcher> list = new ArrayList<>(); @Override public void addWatcher(Watcher watcher) { list.add(watcher); } @Override public void removeWatcher(Watcher watcher) { list.remove(watcher); } @Override public void notifyWatcher(String str) { for(Watcher watcher:list){ watcher.update(str); } } }
5.最後建立一個測試類測試一下效果
/**
* 測試類
* Created by legend on 2016/6/16.
*/
public class Test {
public static void main(String[] args){
Watched nvShen = new WatchedObj();
WatcherObj diaoS1 = new WatcherObj();
WatcherObj diaoS2 = new WatcherObj();
WatcherObj diaoS3 = new WatcherObj();
nvShen.addWatcher(diaoS1);
nvShen.addWatcher(diaoS2);
nvShen.addWatcher(diaoS3);
nvShen.notifyWatcher("小屌絲兒們,女神來啦");
}
}
測試後發下會打印出