zoukankan      html  css  js  c++  java
  • 1:n Oberserver模式

     1 package edu.aeon.model.oberserver;
     2 
     3 /**
     4  * 通职者接口     
     5  * @author lzj
     6  * 2017年10月26日 下午4:22:29
     7  */
     8 public interface Notify {
     9     /**
    10      * 注册一个观察者
    11      * at 2017年10月26日 下午4:20:31 by lzj
    12      * @Parameters1 Watcher watcher
    13      * @Returns void
    14      */
    15     public void addWatcher(Watcher watcher);
    16     /**
    17      * 删除一个观察者
    18      * at 2017年10月26日 下午4:21:19 by lzj
    19      * @Parameters1 Watcher watcher
    20      * @Returns void
    21      */
    22     public void removeWatcher(Watcher watcher);
    23     /**
    24      * 通知观察者
    25      * at 2017年10月26日 下午4:21:47 by lzj
    26      * @Parameters1 无
    27      * @Returns void
    28      */
    29     public void notifyWatcher(String str); //通知观察者
    30 }
     1 package edu.aeon.model.oberserver;
     2 import java.util.ArrayList;
     3 import java.util.List;
     4 
     5 /**
     6  * 观察者的添加、删除、以及接收到观察者动态变化时做出的相应行为
     7  * @author lzj
     8  * @create 2017年10月26日 下午4:26:49
     9  * @describe
    10  */
    11 public class Watched implements Notify {
    12 
    13     private List<Watcher> list=new ArrayList<Watcher>();
    14     /* (non-Javadoc)
    15      * @see edu.aeon.model.oberserver.Watched#addWatcher(edu.aeon.model.oberserver.Watcher)
    16      */
    17     @Override
    18     public void addWatcher(Watcher watcher) {
    19         list.add(watcher);
    20     }
    21 
    22     /* (non-Javadoc)
    23      * @see edu.aeon.model.oberserver.Watched#delWatcher(edu.aeon.model.oberserver.Watcher)
    24      */
    25     @Override
    26     public void removeWatcher(Watcher watcher) {
    27         list.remove(watcher);
    28     }
    29 
    30     /* (non-Javadoc)
    31      * @see edu.aeon.model.oberserver.Watched#notifyWatcher(java.lang.String)
    32      */
    33     @Override
    34     public void notifyWatcher(String str) {
    35         //for循环更新所有观察者的状态
    36         for(Watcher watcher : list) {
    37             watcher.update(str);
    38         }
    39     }
    40 }
     1 package edu.aeon.model.oberserver;
     2 
     3 /**
     4  * 观察者接口
     5  * @author lzj
     6  * @create 2017年10月26日 下午4:24:55
     7  */
     8 public interface Watcher {
     9     public void update(String str);
    10 }
     1 package edu.aeon.model.oberserver;
     2 
     3 /**
     4  * @author lzj
     5  * @create 2017年10月26日 下午4:30:45
     6  * @describe
     7  */
     8 public class Person1 implements Watcher{
     9 
    10     /* (non-Javadoc)
    11      * @see edu.aeon.model.oberserver.Watcher#update(java.lang.String)
    12      */
    13     @Override
    14     public void update(String str) {
    15         System.out.println(this.getClass().getName().toString()+str);
    16     }
    17     
    18 }
     1 package edu.aeon.model.oberserver;
     2 
     3 /**
     4  * @author lzj
     5  * @create 2017年10月26日 下午4:39:28
     6  * @describe
     7  */
     8 public class Person2 implements Watcher {
     9 
    10     /* (non-Javadoc)
    11      * @see edu.aeon.model.oberserver.Watcher#update(java.lang.String)
    12      */
    13     @Override
    14     public void update(String str) {
    15         System.out.println(this.getClass().getName().toString()+str);
    16     }
    17 
    18 }
     1 package edu.aeon.model.oberserver;
     2 
     3 /**
     4  * @author lzj
     5  * @create 2017年10月26日 下午12:46:37
     6  * @describe
     7  */
     8 public class TestObserver {
     9 
    10     /**
    11      * at 2017年10月26日 下午12:46:37 by lzj
    12      * @Parameters1
    13      * @Returns void
    14      */
    15     public static void main(String[] args) {
    16         Notify n=new Watched();
    17         Person1 p1=new Person1();
    18         Person2 p2=new Person2();
    19         //注册两位观察者对象、然后开启广播
    20         n.addWatcher(p1);
    21         n.addWatcher(p2);
    22         //广播通知注册的两位观察者:下雨了、去收衣服 !
    23         n.notifyWatcher("下雨了、去收衣服 !");
    24     }
    25 }

     测试结果:

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    Nginx技术研究系列6-配置详解
    IBatis.Net 老技术新研究
    .Net 内存对象分析
    Nginx技术研究系列2-基于Redis实现动态路由
    hexo d 报错‘fatal: could not read Username for 'https://github.com': No error’
    从架构理解价值-我的软件世界观(转载)
    消息队列1:RabbitMQ解析并基于Springboot实战
    PostgreSQL之oracle_fdw安装与使用
    消息队列0:消息队列概述
    Java多线程1:进程和线程的区别
  • 原文地址:https://www.cnblogs.com/aeon/p/7737715.html
Copyright © 2011-2022 走看看