Android|Java觀察者模式

         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();
		}
	}
}


抽象觀察者:WatcherInterface
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();
	}

}

實現了,對被觀察者實現類的操作,更新了觀察者實現類中的方法。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章