您的位置:首页 > 移动开发 > Android开发

Android 设计模式之观察者模式

2014-08-26 16:04 597 查看
       观察者模式又叫发布-订阅(Publish/Subscribe)模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

      

意 图:

       定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

适 用环 境

         当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
         当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
         当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。
       在Android系统中,大量使用了观察者模式来监听数据及设备的变化,如网络服务监听网络状态变化;数据库数据更新的监听。下面是网络服务中使用观察者模式的示例代码:

       // 观察者接口
private static class InterfaceObserver extends INetworkManagementEventObserver.Stub {
private EthernetDataTracker mTracker;

InterfaceObserver(EthernetDataTracker tracker) {
super();
mTracker = tracker;
}

public void interfaceStatusChanged(String iface, boolean up) {
Log.d(TAG, "Interface status changed: " + iface + (up ? "up" : "down"));
}

public void interfaceLinkStateChanged(String iface, boolean up) {
if (mIface.equals(iface)) {
Log.d(TAG, "Interface " + iface + " link " + (up ? "up" : "down"));
mLinkUp = up;
mTracker.mNetworkInfo.setIsAvailable(up);

// use DHCP
if (up) {
mTracker.reconnect();
} else {
mTracker.disconnect();
}
}
}

public void interfaceAdded(String iface) {
mTracker.interfaceAdded(iface);
}

public void interfaceRemoved(String iface) {
mTracker.interfaceRemoved(iface);
}

public void limitReached(String limitName, String iface) {
// Ignored.
}

public void interfaceClassDataActivityChanged(String label, boolean active) {
// Ignored.
}
}

// 创建一个观察者
mInterfaceObserver = new InterfaceObserver(this);
 // 注册一个观察者
try{
mNMService.registerObserver(mInterfaceObserver);
} catch (RemoteException e) {
Log.e(TAG, "Could not register InterfaceObserver " + e);
}以上代码在frameworks\base\core\java\android\net\EthernetDataTracker.java中,从中可以看出单Ethernet状态发生变化时,观察者能监听到对应的事件并做出相应的处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息