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

本文介绍了观察者模式的基本概念,包括被观察者与观察者之间的交互原理,并通过具体代码示例展示了如何实现这一模式。此外还介绍了该模式在网络管理服务中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者模式

观察者模式有如下角色

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

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

转载于:https://www.cnblogs.com/claruarius/p/5785813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值