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

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

  • 相关阅读:
    【Quartz】Quartz将Job保存在数据库中所需表的说明
    第十章 springboot + logback
    第二章 rabbitmq在mac上的安装
    第九章 springboot + mybatis + 多数据源 (AOP实现)
    第一章 AOP
    第八章 springboot + mybatis + 多数据源
    第三章 线程安全的DateFormat工具类
    第六章 consul UI
    第五章 consul key/value
    附1 consul常用命令+常用选项
  • 原文地址:https://www.cnblogs.com/claruarius/p/5785813.html
Copyright © 2011-2022 走看看