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

    本文章,摘抄自:2018黑马程序最新面试题汇总

    观察者模式很好理解,类似于邮件订阅和 RSS 订阅,当我们浏览一些博客或 wiki 时,经常会看到 RSS 图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。

    其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

     1 public interface IObserver {
     2     public void update();
     3 }
     4 
     5 public class Observer1 implements IObserver {
     6 
     7     @Override
     8     public void update() {
     9         System.out.println("observer1 has received!");
    10 
    11     }
    12 }
    13 
    14 public class Observer2 implements IObserver {
    15 
    16     @Override
    17     public void update() {
    18         System.out.println("observer2 has received!");
    19 
    20     }
    21 }
     1 public interface ISubject {
     2 
     3     /**
     4      * 增加观察者
     5      */
     6     public void add(IObserver observer);
     7 
     8     /**
     9      * 删除观察者
    10      */
    11     public void del(IObserver observer);
    12 
    13     /**
    14      * 通知所有的观察者
    15      */
    16     public void notifyObservers();
    17 
    18     /**
    19      * 自身的操作
    20      */
    21     public void operation();
    22 }
     1 import java.util.Enumeration;
     2 import java.util.Vector;
     3 
     4 public abstract class AbstractSubject implements ISubject {
     5     private Vector<IObserver> vector = new Vector<>();
     6 
     7     @Override
     8     public void add(IObserver observer) {
     9         vector.add(observer);
    10     }
    11 
    12     @Override
    13     public void del(IObserver observer) {
    14         vector.remove(observer);
    15     }
    16 
    17     @Override
    18     public void notifyObservers() {
    19         Enumeration<IObserver> enumo = vector.elements();
    20         while (enumo.hasMoreElements()) {
    21             enumo.nextElement().update();
    22 
    23         }
    24     }
    25 }
     1 public class MySubject extends AbstractSubject {
     2 
     3     @Override
     4     public void operation() {
     5         System.out.println("update self!");
     6         notifyObservers();
     7 
     8     }
     9 
    10 }

    测试方法:

    1 @Test
    2     public void test() {
    3         ISubject subject = new MySubject();
    4         subject.add(new Observer1());
    5         subject.add(new Observer2());
    6         subject.operation();
    7     }

    结果:

  • 相关阅读:
    第十二周总结
    第十一周总结
    第十周总结
    人月神话阅读笔记04
    第九周总结
    第八周总结
    人月神话阅读笔记03
    主成分分析(PCA)算法介绍及matlab实现案例
    Cross-entropy
    压缩算法--TP(1978)
  • 原文地址:https://www.cnblogs.com/ffeiyang/p/9542825.html
Copyright © 2011-2022 走看看