zoukankan      html  css  js  c++  java
  • java设计模式之观察者模式

    观察者模式

      观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

    观察者模式UML图

    观察者模式代码

    package com.roc.observer;
    /**
     * 通知者抽象者
     * @author liaowp
     *
     */
    public interface Message {
    
        public void Add(Observer observer);//增加观察者
        
        public void delete(Observer observer);//删除观察者
        
        public void notice();
    }
    package com.roc.observer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    
    public class EmailMessage implements Message{
    
        private List<Observer> observers=new ArrayList<Observer>();
        
        public void Add(Observer observer) {
            observers.add(observer);
            
        }
    
        public void delete(Observer observer) {
            observers.remove(observer);
        }
    
        public void notice() {
            for (Observer observer : observers) {
                observer.notice();
            }
        }
    
    }
    package com.roc.observer;
    /**
     * 抽象观察者
     * @author liaowp
     *
     */
    public interface Observer {
        
        public void notice();
        
    }
    package com.roc.observer;
    /**
     * 具体观察者
     * @author liaowp
     *
     */
    public class Observer1 implements Observer{
    
        @Override
        public void notice() {
            System.out.println("observer1收到推送");    
        }
    
    }
    package com.roc.observer;
    /**
     * 观察者模式
     * @author liaowp
     *
     */
    public class Client {
        public static void main(String[] args) {
            Message message=new EmailMessage();//邮件   具体的通知
            message.Add(new Observer1());//要通知的人
            message.notice();
        }
    }

    观察者模式适应场景

    1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。 
    2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。 

  • 相关阅读:
    获取一个日期月的所有日期
    elementUI 日期 周一、周二、周三、周四、周五、周六、周日快捷键
    两个日期之间的天数集合
    数组去重并排序
    日历封装
    <转载> VUE项目中CSS管理
    【转载】Vue项目自动转换 px 为 rem,高保真还原设计图
    HTML5新标签
    pChart图表插件使用
    JavaScript ajax请求
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5790874.html
Copyright © 2011-2022 走看看