可以看到很多公司招聘要求上需要了解以下各种框架,如:libevent,aocp(window平台下),boost.asio等。
再来看看下面的代码,通过下面简单的代码来理解这个模式的核心部分,观察者模式发展出现在很多编程模型。
事件驱动:刚开始接触这个名词,觉得很复杂,事件包括什么..........老师们都会说鼠标和键盘按下都会发起一个事件,然后呢然后是不是还一头雾水。等等,让我们回过头来看看这个设计模式,它的思想可以说是非常强大了,不止是事件驱动通知这么简单,还有后面还有基于事件驱动的I/O 复用 reactor模型,再到大名鼎鼎epoll模型,再到上面说到的i/o多路复用框架
让我们从最简单角度去理解它们的根本吧----> 观察者模式
它的核心还是解耦,解耦,解耦,重要的事说三遍......
interface Observer2Info{//监听接口
void update(observable2_1 o);
}
class observer2_1 implements Observer2Info{//观察者
@Override
public void update(observable2_1 o) {
System.out.println("objserve1");
}
}
class observer2_2 implements Observer2Info{//观察者
@Override
public void update(observable2_1 o) {
System.out.println("objserve2");
}
}
class observable2_1{//被观察者
List<Observer2Info> obs = new ArrayList<>();
public void addObs(Observer2Info o){
obs.add(o);
}
public void doSomeT(){
System.out.println("被观察者,我发生了变化");
notifyObservers();
}
public void notifyObservers(){
for(Observer2Info i: obs){
i.update(this);//解耦合:这里update可以用异步来做,它可能会有io或大量计算,如果都放在当前这个for里面,那么循环执行结束时间有可能就要很长时间
}
}
}
class testMain{//调用
public static void main(String[] args) {
observable2_1 obs = new observable2_1();
obs.addObs(new observer2_1());//主动权:调用的时候可以进行控制要通知哪些接口需要update
obs.addObs(new observer2_2());
obs.doSomeT();//真正执行变化的方法
}
}