观察者模式是开发中常使用的模式,值得亲自敲一遍。话不多说,撸代码!
观察者模式的定义
我们先看一下观察者模式的定义:
定义对象间的一种一对多的依赖关系。当一个对象的状态发生变化,所有依赖它的对象都得到通知并被自定更新。
状态发生变化的对象就是被观察者Observerable,得到通知的对象是观察者Observer。举个例子,一个报社有很多订阅者,当有新报纸时,报社要将新报纸投递给每个订阅者。那么报社就是被观察者,订阅人就是观察者。作为报社要提供订阅的途径、退订的途径,订阅者要提供报纸投递地址。
我们可以抽象出来一下几个类:一个Observerable接口代表被观察者、一个Observer代表观察者以及它们的实现类。具体类图如下:

Observerable定义被观察要实现的接口,包括注册、删除、通知接口。代码如下:
1public interface Observerable {
2
3 void registerObserver(Observer observer);
4
5 void removeObserver(Observer observer);
6
7 void notifyObserver();
8
9}
具体的实现类,要实现三个接口,同时定义必要的字段存储观察者列表以及自身的状态。
1public class ConcreteObserverable implements Observerable{
2
3 List<Observer> observers = new ArrayList<Observer>();
4
5 private String message;
6
7 public void registerObserver(Observer observer) {
8 observers.add(observer);
9 }
10
11 public void removeObserver(Observer observer) {
12 observers.remove(observer);
13 }
14
15 public void notifyObserver() {
16 observers.forEach(observer -> {
17 observer.update(message);
18 });
19 }
20}
Observer接口代表观察者,其定义更新方法,作为观察者得到新消息自身要进行处理。
1public interface Observer {
2
3 void update(String message);
4
5}
具体的实现类:
1public class ConcreteObserver implements Observer {
2 @Override
3 public void update(String message) {
4 System.out.println("receive new message: " + message);
5 }
6}
观察者模式的意义
观察者模式本质上是联动触发机制。当修改目标对象时,触发相应的通知,然后通知所有观察者,实现了广播通信模式。同时目标对象可以与观察者松解耦。
文章转载自CodingWithFun,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




