美文网首页
观察者设计模式

观察者设计模式

作者: 垃圾简书_吃枣药丸 | 来源:发表于2018-08-27 16:08 被阅读9次

在被观察者类中保存有一份观察者名单,在某些业务逻辑执行的时候,会调用观察者的通知接口

  1. 观察者接口IObserver
package pattern.observer;

/**
 * 观察者接口
 */
public interface IObserver {
    void handleSome(String message);
}

2.观察者实现类ObserverFirst,ObserverSecond

package pattern.observer;

/**
 * 第一个观察者
 */
public class ObserverFirst implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}



package pattern.observer;

/**
 * 第二个观察者
 */
public class ObserverSecond implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}
  1. 被观察者接口IObserverable
package pattern.observer;

import java.util.ArrayList;

/**
 * 被观察者接口
 */
public interface IObserverable {
    /**
     * 添加观察者
     */
    void addObserver(IObserver iObserver);

    /**
     * 删除观察者
     */
    void removeObserver(IObserver iObserver);

    /**
     * doSome,被观察者观察的方法
     */
    void doSome(String some);

    /**
     * 观察者列表
     */
    ArrayList<IObserver> observerList();
}
  1. 被观察者实现类Observerable
package pattern.observer;

import java.util.ArrayList;

public class Observerable implements IObserverable {
    ArrayList<IObserver> observers;

    public Observerable() {
        observers = new ArrayList<>();
    }

    /**
     * 添加观察者
     */
    public void addObserver(IObserver iObserver) {
        observers.add(iObserver);
    }

    /**
     * 删除观察者
     */
    public void removeObserver(IObserver iObserver) {
        observers.remove(iObserver);
    }

    /**
     * doSome,被观察者观察的方法
     */
    public void doSome(String message) {
        for (IObserver observer : observers) {
            observer.handleSome(message);
        }
    }

    /**
     * 观察者列表
     */
    public ArrayList<IObserver> observerList() {
        return observers;
    }
}
  1. 测试
package pattern.observer;

import org.apache.commons.lang.StringUtils;

class MainClass {
    public static void main(String[] args) {
        /**
         * 观察者一号
         */
        IObserver first = new ObserverFirst();
        /**
         * 观察者二号
         */
        IObserver second = new ObserverSecond();

        /**
         * 被观察者
         */
        IObserverable observerable = new Observerable();
        /**
         * 被观察者添加观察者
         */
        observerable.addObserver(first);
        observerable.addObserver(second);

        /**
         * 被观察者执行业务逻辑
         */
        observerable.doSome("左转");

        System.out.println(StringUtils.repeat("=", 30));

        /**
         * 从观察者列表中删除第一个观察者
         */
        observerable.removeObserver(first);
        observerable.doSome("直行");
    }
}

结果;

ObserverFirst正在处理【左转】
ObserverSecond正在处理【左转】
==============================
ObserverSecond正在处理【直行】

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • RxJava基础—观察者模式

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

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

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

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

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • Android LifeCycle 源码学习总结

    整体设计 Lifecycle的核心设计模式就是观察者模式。 LifeCycleOwner 是被观察者,Lifecy...

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

    PHP设计模式之观察者模式

  • 设计模式 - 观察者模式

    观察者模式的定义 观察者模式简述 MVC是由各种复杂的设计模式组合而成的复合结构,观察者是其中的设计模式之一。视图...

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

网友评论

      本文标题:观察者设计模式

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