观察者模式示例
观察者模式中一般有两种,一种是推数据的模式(被观测对象向观测对象 送出数据,即在被观测对象发生改变时,主动告知被观测对象),一种是拉模式(观测对象主动去被观测对象去查询是否发生了变化)。虽然方式略有不同,但是基本上实现的原理是相似的。
????? 从java提供的观察者模式的实现入手很容易理解。java提供了一个Observable基类和一个Observer接口,分别是被观测对象基类和观察者需要实现的接口。
???? 简要分析这两个类:1 被观察者对象基类,此基类为于java.util包中,下面贴源码看一下
接下来看两个观察者
?
最后看一下如何 运行的示例public class TestObserverPattern { public static void main(String[] args){ ResourceBean bean = new ResourceBean();//被观测对象 LockOberver lock = new LockOberver(); UnlockOberver unlock = new UnlockOberver(); bean.addObserver(lock); bean.addObserver(unlock); bean.doSomething("lock"); bean.doSomething("freeAccess"); bean.doSomething("unlock"); } }?写道in resource bean event:lock has done
运行的结果:
收到锁定的通知 com.yasouth.ResourceBean@4a5ab2变化值:lock
in resource bean event:freeAccess has done
in resource bean event:unlock has done
输出收到解锁的通知:com.yasouth.ResourceBean@4a5ab2 参数值:unlock?
这样一个简单的观察者示例就结束了
后续的工作是想了解一下,观察者模式中在java同步机制的具体应用,待续?