java 观察者模式

定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。

被观察者要继承: Observable类  实现消息推送  、setChanged  notifyObservers();

观察者要继承: Observer类  实现updata(); 注册 

 

package 观察者模式;

import java.util.Observable;
import java.util.Observer;

/**
 * 
 * @author 红尘Dream
 * 观察者模式: 一对多的模式 
 * 当被观察者发生变化时, 观察者会受到通知自动更新
 * 服务被观察者 : 推送消息 通知观察者
 * 观察者: 订阅主题    自动更新消息
 */
public class Test
{
    public static void main(String[] args)
    {
        Service s = new Service(); //创建被观察者 服务者
        Observerl o = new Observerl(); //创建观察者
        Observerl o1 = new Observerl(); //创建观察者
        Observerl o2 = new Observerl(); //创建观察者
        Observerl o3 = new Observerl(); //创建观察者
        Observerl o4 = new Observerl(); //创建观察者
        
        o.registerService(s);//订阅服务
        o1.registerService(s);
        o2.registerService(s);
        o3.registerService(s);
        o4.registerService(s);
        //取消订阅
        o1.unRegisterService(s);
        s.setMsg("今天新闻热点");
        
        
        
    }
}

/**
 * 服务类  被观察者  用于推送消息
 */

class Service extends Observable
{
    private String msg;
    
    public String getMsg()
    {
        return msg+"(来自服务者(被观察者))";
    }
    
    /**
     * 
     * 推送消息
     */
    public void setMsg(String msg)
    {
        this.msg = msg;
        setChanged();//设置改变
        notifyObservers();// 通知观察者
    }
    
    
}

/**
* 被观察者 类
*/
class Observerl implements Observer { /** * 订阅 服务 * */ public void registerService(Observable observable) { observable.addObserver(this); } /** * 取消订阅 */ public void unRegisterService(Observable observable) { observable.deleteObserver(this); } /** * 实现观察者的更新方法 */ @Override public void update(Observable arg0, Object arg1) { if(arg0 instanceof Service) { Service s = (Service) arg0; System.out.println("观察者更新:"+s.getMsg()); } } }

执行结果:

观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))

 

posted @ 2016-04-20 10:41  红尘Dream  阅读(283)  评论(0编辑  收藏  举报