观察者模式

作者: Stephenwish | 来源:发表于2020-07-26 19:17 被阅读0次
观察者本质是发布订阅模式,一个类变化了,通知其他和这个类有关联的类,并且跟着变化

第一步先写一个简单的一个类执行方法触发另一个类的方法(简单观察者模型)后面在升级
//被观察的类
public abstract class Subject {
    abstract void doMethod1();
    abstract void doMethod2();
}
//观察类
public abstract class Observer {
    abstract void doMethodA();
    abstract void doMethodB();
}

两个抽象各自具体实现

public class SubjectImpl extends Subject{
   private Observer observer=new AObserverImpl();

   @Override
    void doMethod1() {
        System.err.println("被观察的类发出动作1");
        observer.doMethodA();
    }

    @Override
    void doMethod2() {
        System.err.println("被观察的类发出动作2");
    }
}
public class AObserverImpl extends  Observer{
    @Override
    void doMethodA() {
        System.err.println("发现观察对象有行为,我也跟着做执行对应方法A");
    }

    @Override
    void doMethodB() {
        System.err.println("发现观察对象有行为,我也跟着做执行对应方法B");
    }
}
再写一个测试类
public class Client {
    public static void main(String[] args) {
        Subject subject = new SubjectImpl();
        subject.doMethod1();
    }
}
//输出
//>>>>被观察的类发出动作1
//发现观察对象有行为,我也跟着做执行对应方法

\color{red}\spadesuitSubject 类有多个关联的类,不止一个,需要全部通知,把一个实现换成多个,用List改造下。

public class SubjectImpl extends Subject{
  private List<Observer> observers=new ArrayList<>();

  public void addObserver(Observer observer){
      observers.add(observer);
  }

  public void deleteObserver(Observer observer){
      observers.remove(observer);
  }

   @Override
    void doMethod1() {
        System.err.println("被观察的类发出动作1");
       for (Observer observer : observers) {
           observer.doMethodA();
       }
    }

    @Override
    void doMethod2() {
        System.err.println("被观察的类发出动作2");
    }
}
public class Client {
    public static void main(String[] args) {
        Observer observerA = new AObserverImpl();
        Observer observerB = new BObserverImpl();
        SubjectImpl subject = new SubjectImpl();
        subject.addObserver(observerA);
        subject.addObserver(observerB);
        subject.doMethod1();
    }
}

\color{red}\spadesuit在优化,在对代码SubjectImpl 里面的方法分离下观察对象为一个接口,方便以后扩展

public interface IBeiGuanCha {
     void addObserver(Observer observer);
     void deleteObserver(Observer observer);
}
public class SubjectImpl extends Subject implements IBeiGuanCha{
  private List<Observer> observers=new ArrayList<>();

  @Override
  public void addObserver(Observer observer){
      observers.add(observer);
  }

  @Override
  public void deleteObserver(Observer observer){
      observers.remove(observer);
  }

   @Override
    void doMethod1() {
        System.err.println("被观察的类发出动作1");
       for (Observer observer : observers) {
           observer.doMethodA();
       }
    }

    @Override
    void doMethod2() {
        System.err.println("被观察的类发出动作2");
    }
}


相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

    本文标题:观察者模式

    本文链接:https://www.haomeiwen.com/subject/jokglktx.html