美文网首页
13.观察者模式

13.观察者模式

作者: 0x70e8 | 来源:发表于2018-03-20 20:04 被阅读0次

1.是什么

观察者定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个对象主题,当这个对象发送变化(执行什么方法了),会通知所有的观察者,观察者会做出对应的action。
此模式也叫发布-订阅模式,监听者就是订阅者,被监听者是发布者,也就是主题。

2.怎么用

比较简单,直接看示例代码。

/*
主题接口
*/
import java.util.ArrayList;
import java.util.List;

public abstract class Subject {

    private List<IObserver> listeners = new ArrayList<>();

    public void addListener(IObserver listener) {
        listeners.add(listener);
    }

    public void removeListener(IObserver listener) {
        listeners.remove(listener);
    }

    public void clearListener() {
        listeners.clear();
    }

    void notifyListener() {
        for (IObserver o : listeners) {
            o.action();
        }
    }

    /**
     * @return the listeners
     */
    public List<IObserver> getListeners() {
        return listeners;
    }

    public abstract void startWork();

}


/**
 * 主题实现类
 *
 */
public class TVSubject extends Subject {

    @Override
    public void startWork() {
        notifyListener();
        System.out.println("开始看电视");

    }

}


// 观察者接口
public interface IObserver {

    public void action();
}

// 观察者实现
public class WatchTVObeserver implements IObserver {

    @Override
    public void action() {
        System.out.println("告诉家长他又在看电视");

    }

}

// client
/**
 * 观察者模式</br>
 * 观察到一看电视就通知家长</br>
 * 作用类似于局部的拦截器</br>
 * 拦截某个具体方法 </br>
 * 只是拦截器可能是使用动态代理等实现,属于动态拦截</br>
 * 
 * @author shaoyuxia
 *
 */
public class Client {

    public static void main(String[] args) {
        IObserver ad = new WatchTVObeserver();
        TVSubject sub = new TVSubject();
        sub.addListener(ad);
        sub.addListener(new IObserver() {

            @Override
            public void action() {
                System.out.println("开始跳出弹窗");

            }
        });
        sub.startWork();

    }

}

相关文章

  • 13.观察者模式

    1.是什么 观察者定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个对象主题,当这个对象发送变化(执行什么...

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

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

  • RxJava基础—观察者模式

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

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

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

  • RxJava 原理篇

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

  • 观察者模式

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

  • 设计模式-观察者模式

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

  • 观察者模式

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

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

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

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

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

网友评论

      本文标题:13.观察者模式

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