java模式之观察者模式

        所谓观察者模式指的是一对多的关系的模式,可以用消息发布来作为比喻,发布者对应多个接受者,接受者可以注册或者删除订阅
        
        最典型的观察者模式应用的是Java的Swing时间监听事件,每个listener注册到事件处理的Handler中,当事件源发生的时候,将遍历(广播)消息到所有的Listener中执行相应的方法,如actionPerform()中;
 
        下面简单介绍一下我所理解的观察者模式。
 
        首先是订阅者,Listener接口:
 
        
         接口主要有两个方法,一个是attachToObserver,也就是订阅;一个是doThings()也就是其主要的工作
 
        在定义Observer接口:
 
       ·
        其中 addListener()和removeListener()均是来增加或者减少订阅者的消息。broadcast()方法则是通知消息
 
       接下来我们看下Listener的两个实现
 
        
 
        
 
        以及Observer实现
        
        由于HashSet并不是线程安全的collection,上面为了避免在多线程中出现的数据不一致问题使用了同步语句,可能会降低程序执行的效率,但是在本测试中(单线程)并不存在这个问题
 
        然后看一下测试程序:
 
        
        
        一个Observer有两个订阅者,然后看下结果
 
        
 
        由于HashSet有排序,姑且不用去看输出顺序。
 
 
        这是比较简单的实现方式,当然复杂的话,可以为每个Observer设置一个Handler,在Handler实现add和remove方法就行。另外考虑到时间的复杂性,也可以设计一个事件的接口,EventSource之类的,并实现即可。
 
 
 
        这这是最简单的观察者模式,我称之为订阅模式,类比于Java的Swing的监听事件,如给一个Button绑定listener,在Listener中实现相应的动作,当事件发生的时候(在Button中表示按下按钮事件),Button会将该动作传递到每一个订阅的Listener中并执行Listener中相应的动作,当然Swing实现的比较复杂,涉及到多线程的同步和通信过程,在此不提及
        
 
        

你可能感兴趣的:(观察者,java模式)