行为型(一) - 观察者模式

一、概念

观察者模式(Observer Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。

二、实现

这里举个电视剧订阅的例子,比如琅琊榜,我们订阅以后,每集更新都会通知到所有的订阅者。

1、被观察者

#TVPlayObservable 
public interface TVPlayObservable {
    void registerObserver(Observer observer);
    void unRegisterObserver(Observer observer);
    void notifyObservers(String newMsg);
}

#LangYaBangObservable
public class LangYaBangObservable implements TVPlayObservable {
    List<Observer> observers = new ArrayList<>();

    @Override
    public void registerObserver(Observer observer) {
        if (observer != null && !observers.contains(observer)) {
            observers.add(observer);
        }
    }

    @Override
    public void unRegisterObserver(Observer observer) {
        if (observer != null && observers.contains(observer)) {
            observers.remove(observer);
        }
    }

    @Override
    public void notifyObservers(String newMsg) {
        for (Observer observer : observers) {
            observer.updateMessage(newMsg);
        }
    }
}

2、观察者

public interface Observer {
    void updateMessage(String msg);
}

public class ObserverA implements Observer {
    @Override
    public void updateMessage(String msg) {
        System.out.println("ObserverA - 新消息:" + msg);
    }
}

public class ObserverB implements Observer {
    @Override
    public void updateMessage(String msg) {
        System.out.println("ObserverB - 新消息:" + msg);
    }
}

3、测试类

public class Client {
    public static void main(String[] args) {
        LangYaBangObservable langYaBangObservable = new LangYaBangObservable();
        ObserverA observerA = new ObserverA();
        ObserverB observerB = new ObserverB();

        langYaBangObservable.registerObserver(observerA);
        langYaBangObservable.registerObserver(observerB);

        langYaBangObservable.notifyObservers("琅琊榜剧更新了,快来看啊!!!");
    }
}

4、运行结果
观察者结果.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值