码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-08-18 23:27:57      阅读:308      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!