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

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

  • 相关阅读:
    个人亲历运维面试
    《Kubernetes进阶实战》之管理Pod资源对象
    Docker容器必备技能 -- iptables
    vue后台管理权限正确思路
    Axios 各种请求方式传递参数格式
    Cookie的使用(js-cookie插件)
    微信小程序template模板与component组件的区别和使用
    如何机智地回答浏览器兼容性问题
    webpack系列5:源码流程,webpack编译流程
    webpack系列4:文件分析.
  • 原文地址:https://www.cnblogs.com/claruarius/p/5785813.html
Copyright © 2020-2023  润新知