设计模式(3)观察者模式

一.介绍

    1. 观察者模式:又可称为发布-订阅模式,顾名思义,就是定义一个监听者,监听着被观察的事件,一旦观察到被监听者某个状态变化就会触发相应的事件

    2.应用场景 

        观察者模式常被用于实现订阅功能的场景,如微博订阅,当我们订阅了某个人的微博账号,该用户发布消息,就会通知到我们

    3.实现方案:

        (1).针对观察者和被观察者分别定义接口(有利于进行扩展)

        (2)被观察者: 1)定义观察者集合,并定义针对集合的添加,删除操作

                                   2)定义通知方法,通过遍历集合调用观察者相应方法

        (3)观察者中需要有个处理相应事件的方法

4.优点

    观察者和被观察者是抽象耦合的,建立了一套触发机制

二.实例

    小红遇到危险,喊救命,这时小黄和小明听到,触发相应的事件

1.被观察者接口

//被观察者
public interface Subject {
    void call();
    void addObserver(Observer ob);
}

2.观察者接口

//观察者
public interface Observer {
    void doSomething();
}

3.小红(被观察者)

//被观察者
public class XiaoHong implements Subject {

    private ArrayList<Observer> observers;

    public XiaoHong(){
        observers = new ArrayList<Observer>();
    }
    @Override
    public void call() {
        System.out.println("小红:救命啊...");
        for (Observer observer : observers) {
            observer.doSomething();
        }

    }

    @Override
    public void addObserver(Observer ob) {
        if (ob != null){
            observers.add(ob);
        }
    }
}

4.小黄(观察者)

//观察者
public class XiaoHuang implements Observer {
    @Override
    public void doSomething() {
        System.out.println("小黄:飞奔过去...");
    }
}

5.小明(观察者)

//观察者
public class XiaoMing implements Observer {

    @Override
    public void doSomething() {
        System.out.println("小明:报警...");
    }
}

6.测试

public class ObserverApp  {

    public static void main(String[] args) {

        XiaoHong xiaoHong = new XiaoHong();//被观察者

        XiaoHuang xiaoHuang = new XiaoHuang();//观察者
        XiaoMing xiaoming = new XiaoMing();//观察者

        xiaoHong.addObserver(xiaoHuang);//向小红注册观察者
        xiaoHong.addObserver(xiaoming);//向小红注册观察者

        xiaoHong.call();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34645958/article/details/80847581