1. 程式人生 > >觀察者模式理解及demo

觀察者模式理解及demo

最近在學習響應式程式設計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("小屌絲兒們,女神來啦");
    }
}
測試後發下會打印出