zoukankan      html  css  js  c++  java
  • 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()); } } }

    执行结果:

    观察者更新:今天新闻热点(来自服务者(被观察者))
    观察者更新:今天新闻热点(来自服务者(被观察者))
    观察者更新:今天新闻热点(来自服务者(被观察者))
    观察者更新:今天新闻热点(来自服务者(被观察者))
  • 相关阅读:
    Idea14 生成webservices
    第10组 Beta冲刺(4/4)
    2019 SDN上机第7次作业
    第10组 Beta冲刺(3/4)
    第10组 Beta冲刺(2/4)
    第10组 Beta冲刺(1/4)
    2019 SDN上机第6次作业
    SDN课程阅读作业(2)
    2019 SDN上机第5次作业
    第10组 Alpha冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/pbq-dream/p/5411614.html
Copyright © 2011-2022 走看看