用例场合
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