RxJava系列之一:观察者模式

时间:2022-02-08 17:46:06
一.什么是RxJava

    RxJava是一个采用观察者设计模式的变成框架,自然少不了对于观察者设计模式的讲解。下面就简单先对观察者设计模式进行简单的介绍。

二.观察者(Observer)设计模式简介

    (一).基本原理描述

    Observer模式是二十三中Java编程设计模式中的一种。

    Observer设计模式的有点:解除了观察者与被观察者之间的耦合关系,被观察者不需要知道观察者的任何信息。被观察者只需要允许观察者监听相应的事件,被观察者可以有多个观察者。简单的理解为观察者实在监听被观察者状态的改变。被观察者简单的将事件传递给每一个观察者。

    (二).代码简单实现

     a.定义一个观察者接口

  1. public interface Observer {  
  2.     public void update();  

    b.两个实现类

  1. public class Observer1 implements Observer {
  2.     @Override  
  3.     public void update() {  
  4.         System.out.println("观察者1");  
  5.     }  

  1. public class Observer2 implements Observer {  
  2.     @Override  
  3.     public void update() {  
  4.         System.out.println("观察者2");  
  5.     }

Subject接口及实现类:

  1. public interface Subject {  
  2.     /*增加观察者*/  
  3.     public void add(Observer observer);  
  4.     /*删除观察者*/  
  5.     public void del(Observer observer);  
  6.     /*通知所有的观察者*/  
  7.     public void notifyObservers();  
  8.     /*自身的操作*/  
  9.     public void operation();  
  10. }  
  1. public abstract class AbstractSubject implements Subject {
  2.     private Vector<Observer> vector = new Vector<Observer>();  
  3.     @Override  
  4.     public void add(Observer observer) {  
  5.         vector.add(observer);  
  6.     }  
  7.     @Override  
  8.     public void del(Observer observer) {  
  9.         vector.remove(observer);  
  10.     }  
  11.     @Override  
  12.     public void notifyObservers() {  
  13.         Enumeration<Observer> enumo = vector.elements();  
  14.         while(enumo.hasMoreElements()){  
  15.             enumo.nextElement().update();  
  16.         }  
  17.     }  
  18. }  
  1. public class MySubject extends AbstractSubject {  
  2.     @Override  
  3.     public void operation() {  
  4.         System.out.println("自身操作");  
  5.         notifyObservers();  
  6.     }  
  7.   
  8. }  

程序主入口:

  1. public class ObserverTest {  
  2.     public static void main(String[] args) {  
  3.         Subject sub = new MySubject();  
  4.         sub.add(new Observer1());  
  5.         sub.add(new Observer2());        
  6.         sub.operation();  
  7.     }  
  8. }
最后输出结果为:

自身操作
观察者1
观察者2

    最后代码没有多复杂,多加用断点跟进程序就能接单的了解观察者模式!