Observer Pattern(觀察者模式)

Observer Pattern(觀察者模式)

當我們在執行某些程式(例如網路連線、複雜運算…等), 並不知道甚麼時候會結束,
因此會希望在結束的時候, 通知某些程式做某些事情。

舉個簡單的例子,
假設現在我們宣告一個Button, 當使用者按下Button的時候, 我們就會去執行一些程式,
這就是一個標準的觀察者模式。

Buttton button = new Button();
button.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
    //do something
  }
});

如果是要自己實作的話, 其實也不難,
首先建立一個interface,

public interface OnClickListener{
    public void onClick();
}

接著在自己的類別實作這個介面


public class MyButton{

  private OnClickListener mOnClickLitener;

    public void setOnClickLitener(OnClickListener listener){
        mOnClickLitener = listener;
    }

    public void pushDownButton(){
        if(mOnClickLitener != null){
            mOnClickLitener.onClick();
        }
    }
}

這樣一來只要呼叫pushDownButton這個方法,就會觸發事件。
在主程式試看看。

public class ListenerDemo{
    public static void main(String[] args){
    MyButton mButton = new MyButton();

    mButton.setOnClickLitener(new OnClickListener(){
            public void onClick(){
                System.out.println("button is clicked.");
            }
        });
        mButton.pushDownButton();
  }
}

這樣一來只要button呼叫pushDownButton, 就會call OnClickListener的onClick方法。
這就是觀察者模式的雛型。