Android開發過程大量的使用回調的方式,這就涉及到了開發模式中的觀察者模式。參考他人代碼整理了個簡單的觀察者模式:
抽象被觀察者:WatchedInterface
抽象被觀察者實現類:ImplWatched
抽象觀察者:WatcherInterface
抽象觀察者實現類:ImplWatcher1、ImplWatcher2、ImplWatcher3
抽象被觀察者:WatchedInterface.java:
package com.sample.observer;
/**
* 定義一個接口爲抽象被觀察者
*/
public interface WatchedInterface{
/**
* @param watcher
* 定義一個用來增加觀察者的方法
*/
public void add(WatcherInterface watcher);
/**
* @param watcher
* 定義一個用來刪除觀察者的方法
*/
public void remove(WatcherInterface watcher);
/**
* 定義一個向觀察者發送通知的方法
*/
public void notifyWatcher();
}
抽象被觀察者實現類:ImplWatched.java
package com.sample.observer;
import java.util.ArrayList;
/**
* 具體被觀察者,實現抽象被觀察者方法
*/
public class ImplWatched implements WatchedInterface {
// 定義一個List存放WatcherInterface子類的實例
private ArrayList<WatcherInterface> list = new ArrayList<WatcherInterface>();
@Override
public void add(WatcherInterface watcher) {
list.add(watcher);
}
@Override
public void remove(WatcherInterface watcher) {
list.remove(watcher);
}
@Override
public void notifyWatcher() {
for (WatcherInterface watcher : list) {
// add到List中的實現類的實例調用自身方法
watcher.updateNotify();
}
}
}
package com.sample.observer;
/**
* 定義一個接口爲抽象觀察者
*/
public interface WatcherInterface {
/**
* 定義一個用來獲取更新信息接收的方法
*/
public void updateNotify();
}
抽象觀察者實現類:ImplWatcher1、ImplWatcher2、ImplWatcher3(這裏只展示一個類,其他兩個類似)
package com.sample.observer;
import android.util.Log;
//定義一個類爲具體觀察者並實現其接口抽象觀察者
public class ImplWatcher1 implements WatcherInterface{
@Override
public void updateNotify() {
// 具體觀察者接收到更新內容通知
Log.i("Observer", "觀察者1接收到更新通知。。。");
}
}
測試類:MainActivity.java
package com.sample.observer;
import com.demo.observer.R;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//實現1被觀察者
WatchedInterface iWatched = new ImplWatched();
//實例化3個觀察者
<span style="white-space:pre"> </span>WatcherInterface iWatcher1 = new ImplWatcher1();
<span style="white-space:pre"> </span>WatcherInterface iWatcher2 = new ImplWatcher2();
<span style="white-space:pre"> </span>WatcherInterface iWatcher3 = new ImplWatcher3();
<span style="white-space:pre"> </span>//添加觀察者
<span style="white-space:pre"> </span>iWatched.add(iWatcher1);
<span style="white-space:pre"> </span>iWatched.add(iWatcher2);
<span style="white-space:pre"> </span>iWatched.add(iWatcher3);
<span style="white-space:pre"> </span>//被觀察者發送改變信息通知
<span style="white-space:pre"> </span>iWatched.notifyWatcher();
}
}
實現了,對被觀察者實現類的操作,更新了觀察者實現類中的方法。