Saturday, October 4, 2014

Android之Observer pattern观察者模式ContentObserver

观察者模式是一个observer观察着subject变化从而做相应动作的模式。程序可以注册多个观察者去监视subject的变化。
用例场合
1. 资源耗费较少的情况下,可以由一个变化触发不同类的行为.
2. 多个观察者。

下面例子是一个关于跟踪用户而在map上画出其轨迹的Android app. 这个app首先利用GPS service服务把坐标写入sqlite里面(GPS服务有监听范围,比如移动50米才写入sqlite). 所以Subject就是sqlite里面path table,任意这个table的变化通过uri都会通知观察者---Google map地图类,从而在地图上画上相应的坐标。另一个observer是统计轨迹数据,比如距离、速度等。

核心类PathsTableObserver是继承ContentObserver重写相应函数onChange
主类Activity中调用getContentResolver().registerContentObserver(uri, false, PathsTableObserver);

uri为监听链接。

//subject类由Anroid框架实现

//观察者类
private class PathsTableObserver extends ContentObserver
{
        @Override
public void onChange(boolean selfChange, Uri newUri)
       {
             observersManager.nodifyNewLocation(location);
       }
}

public class ObserversManager {

      public void start()
     {
   DatabaseObserver dbObserver = new DatabaseObserver(this);
         context.getContentResolver().registerContentObserver(PathPointsTable.DB_URI, true, dbObserver.getPathsTableObserver());

     }
}

还有一个例子:

实现原理只要将观察者(ParkingLot)对象/对象数组作为Subject(ParkingSpot)的一个属性,然后调用观察者的函数即可
abstract class ParkingSpot {
MyParkingLot lot;

public void unpark(){

lot.updateStatus();
}
}

Ref:
http://blog.csdn.net/qinjuning/article/details/7047607

No comments:

Post a Comment