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

  • 相关阅读:
    ASP.NET 无提示关闭窗口
    C# Winform程序获取外网IP地址
    使用System.Drawing.Printing 画报表。
    C# Winform调用IP地址、手机归属和身份证查询接口
    C# 获取文中文字符首字母
    C# WinForm给Button或其它控件添加快捷键响应
    C# 获取农历日期
    TSQL之插入的内容是查询出的值
    C# 获取中文星期的两种方法
    C#批量操作控件
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5790874.html
Copyright © 2011-2022 走看看