监测数据变化,提高性能可以尝试“观察者模式”

业务场景

我们时常需要知道一些状态的变化,然后做相应的改变,比如“Android”手机中,监测到WIFI断开连接了,目前正在使用流量,做视频的APP,就需要提醒用户是否继续观看,如果我们单独启动一个“线程”来不断监测Wifi是否断开,性能将无比差,因为我们需要监测得实在是太多了,Android中,当WIFI状态发生变化,就通知各个APP(需要被通知的)WIFI状态发生变化,各个APP就会做对应的改变,这个就是Android的“广播机制”,那么这其实就是观察者模式

观察者模式

业务角色

同样的,我们定义4个角色

  • 被观察者接口(ISubject):提供添加、删除、通知观察者
  • 被观察者:比如上面的WIFI断开操作
  • 观察者接口(IOberver):当被观察者有变化时,就会被通知
  • 观察者:被通知后,有一个回调方法,类似Android中广播的回调方法
代码实现
  • 被观察者接口,提供添加、删除、通知观察者方法
public interface ISubject{  
    void attach(IObserver observer);	//添加观察者  
    void detach(IObserver observer);	//删除观察者  
    void inform();					//通知所有观察者  
}  
  • 被观察者:比如上面的WIFI断开操作
import java.util.Vector;
public class ConcreteSubject implements ISubject{
	Vector<IObserver> observers=new Vector<IObserver>();
    public void attach(IObserver observer){  
    	observers.addElement(observer);  
    }  
    public void detach(IObserver observer){  
    	observers.removeElement(observer);  
    }  
    public void inform(){
    // 断开WIFI啦,赶快通知各个APP……
    	Event evt=new Event();
    	for(IObserver ob:observers){
    		ob.update(evt);
    	}
    }  
}  
  • 观察者接口(IOberver),观察者需要继承他
public interface IObserver{  
    void update(Event evt);				//更新观察者  
}  
  • 观察者,被通知后提醒用户是否继续观看视频
public class ConcreteObserver implements IObserver{  
    public void update(Event evt){  
    	System.out.println("WIFI已经断开了,是否继续观看视频");
    }  
} 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值