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

  • 相关阅读:
    WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
    PHP
    ASP.NET的路由系统:根据路由规则生成URL
    数据库的范式模型
    P2P编程
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    Html.RenderPartial和Html.Partial在Razor视图中的区别
    如何在本地安装 DotNetNuke 6
    ASP.NET的路由系统:路由映射
    ASP.NET Web API: 宿主(Hosting)
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5790874.html
Copyright © 2011-2022 走看看