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

    1、什么是观察者模式?
    观察者模式就是一种对象间一对多的依赖关系,当对象的状态改变时,通知所有依赖该对象的对象去做信息处理。
    2、观察者模式具体实现角色关系
    2.1 抽象主题角色
    抽象主题角色定义了可以注册、删除和通知观察者的行为
    2.2 具体主题角色
    具体主题实现了抽象主题功能
    2.3 抽象观察者角色
    抽象观察者角色定义了信息处理接口
    2.4 具体观察者角色
    具体观察者实现了抽象观察者信息处理接口,实现具体信息处理功能
    3、代码实现
    /**
    * 抽象主题角色
    */
    public interface Topic {
    /**
    * 观察者注册
    * @param observer
    */
    void registerObserver(Observer observer);

    /**
    * 删除观察者
    * @param observer
    */
    void removeObserver(Observer observer);

    /**
    * 通知观察者
    */
    void notifyObservers();

    /**
    * 主题状态变化
    * @param msg
    */
    void msgChange(String msg);
    }

    public class TopicImpl implements  Topic{
    private List<Observer> observerList = new ArrayList<Observer>();
    private String msg ;

    @Override
    public void registerObserver(Observer observer) {
    this.observerList.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
    this.observerList.remove(observer);
    }

    @Override
    public void notifyObservers() {
    for(Observer observer : observerList){
    observer.update(msg);
    }
    }

    @Override
    public void msgChange(String msg) {
    this.msg = msg;
    }
    }

    /**
    * 抽象观察者
    */
    public interface Observer {
    /**
    * 观察者收到信息做处理
    * @param msg
    */
    void update(String msg);
    }

    /**
    * 观察者1
    */
    public class ObserverImpl implements Observer{
    @Override
    public void update(String msg) {
    System.out.println("ObserverImpl receive msg :" + msg);
    }
    }

    /**
    * 观察者2
    */
    public class ObserverImpl2 implements Observer{
    @Override
    public void update(String msg) {
    System.out.println("ObserverImpl2 receive msg:" + msg);
    }
    }

    /**
    * 测试类
    */
    public class MainTest {
    public static void main(String[] args) {
    Topic topic = new TopicImpl();

    Observer observer1 = new ObserverImpl();
    Observer observer2 = new ObserverImpl2();

    topic.registerObserver(observer1);
    topic.registerObserver(observer2);

    topic.msgChange("Java 是面向对象的语言");
    topic.notifyObservers();
    }
    }

    4、运行结果

     

    
    



  • 相关阅读:
    python定时任务:apscheduler的使用(还有一个celery~)
    Python定时任务-schedule vs. Celery vs. APScheduler
    结合Django+celery二次开发定时周期任务
    The Django Book 2.0--中文版
    第十二章: 部署Django
    Django扩展自定义manage命令
    使用django-extension扩展django的manage――runscript命令
    Django | 执行项目下指定的脚本
    C语言宏定义技巧——多次包括头文件内容不同
    《Java并发编程实战》第十章 避免活跃性危急 读书笔记
  • 原文地址:https://www.cnblogs.com/tspeking/p/9172985.html
Copyright © 2011-2022 走看看