zoukankan      html  css  js  c++  java
  • [设计模式]NetworkManagementService中的观察者模式

    观察者模式

    观察者模式有如下角色

    (1)被观察者(Subject)

    (2)观察者(Observer)

    public class Subject{
    	private:
    		list<Observer> mObservers;
    protect:
    	void onChange(){
    		for(int i=0; i<mObservers.size(); ++i){
    		mObservers.get(i).onAction();
    }
    }
    public:
    	void attach(Observer m){
    		mObservers.add(m);
    }
    void detach(Observer m){
    	mObservers.remove(m);
    }
    };
    
    public class Observer{
    	public:
    		virtual void onAction();
    };
    
    public ConcreteSubject extends Subject {
    	private:
    		int content = 0;
    	public:
    		void updateContent(int n){
    			content = n;
    			onChange();
    }
    
    int getContent(){ return content; }
    };
    
    public ConcreteObserver extends Observer{
    	private:
    		ConcreteSubject mConreteSubject;
    	public:
    		ConcreteObserver(ConcreteSubject subject){ mConcreteSubject = subject; }
    	void onAction(){
    		int content = mConcreteSubject.getcontent();
    }
    }; 
    

     

    如下为NetworkManagementService中的注册观察者的函数(regisrterObserver)和通知观察者的函数(notifyInterfaceStatusChanged),其实在NetworkManagementService中还有很多类型的通知函数,通知变动的内容如下:

    InterfaceStatus

    InterfaceLinkState

    InterfaceAdded

    InterfaceRemoved

    LimitReached

    InterfaceClassActivity

    在NetworkManagementService中观察者是INetworkManagementEventObserver类型,在INetworkManagementEventObserver.aidl

    NetworkManagementService中的观察者模式则更为简单,如下:

    观察者与被观察者的子类之间没有相互依赖关系。如果加上mDataActivityObserver 的幕后操纵者ConnectivityService,结构如下:

    其实在ConnectivityService中除了mDataActivityObserver作为观察者,还有mTethering也作为观察者注册到NetworkManagemanetService中。

    此外除了ConnectivityService还有NetworkPolicyManagerService也有向NetworkMangementService派遣观察者。这种设计真的太妙了。

    (版权所有,转载请告知)

  • 相关阅读:
    FZU 1894 志愿者选拔
    POJ 2823 Sliding Window
    POJ 3038 Flying Right
    xStream 的简单使用 xml to bean
    欧拉函数
    POJ题目分类
    POJ1039 Pipe
    linux进程间通信之消息队列
    欧几里得GCD及扩展
    win7的vmware中安装ubuntu 13.04看不到共享目录
  • 原文地址:https://www.cnblogs.com/claruarius/p/5785813.html
Copyright © 2011-2022 走看看