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、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。 

  • 相关阅读:
    android手机上的app输入法遮挡输入框问题
    简单的百度地图使用
    简单的加入购物车动画效果,需引入外部js文件
    vue项目中axios跨域设置
    一次讲清promise
    js中宏任务,微任务,异步,同步,执行的顺序
    vantUI <van-uploader> 上传图片,如何获取图片的尺寸
    Vue双向绑定原理 从vue2的Object.defineProperty到vue3的proxy
    微信浏览器h5页面开发遇到问题
    Web前端优化最佳实践及工具集锦
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5790874.html
Copyright © 2011-2022 走看看