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派遣观察者。这种设计真的太妙了。

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

  • 相关阅读:
    16.小程序request请求
    15.小程序接入百度地图获取地理位置
    14. 微信小程序之wxss
    13.小程序视图层的模板
    es6字符串几个方法的理解
    记一次仿京东首页的轮播图效果
    ES6中Promise使用方法
    关于新版VS编辑环境下提示fopen不安全的问题报C4996错误的解决办法
    css布局拓展
    HTML的表单元素
  • 原文地址:https://www.cnblogs.com/claruarius/p/5785813.html
Copyright © 2011-2022 走看看