首页 > Web开发 > 详细

[设计模式]NetworkManagementService中的观察者模式

时间:2016-08-18 23:24:52      阅读:406      评论:0      收藏:0      [点我收藏+]

观察者模式

观察者模式有如下角色

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

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

[设计模式]NetworkManagementService中的观察者模式

原文:http://www.cnblogs.com/claruarius/p/5785813.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!