1、观察者模式概述
观察者模式运用在一对一或者一对多的对象交互场景,每当一个对象改变时,可以通知其他对象进行改变。观察者模式是“解耦型模式”(降低对象间的耦合度)的最佳范例。
2、观察者模式的结构
先来看一下观察者模式的类图:
观察者模式中主要有以下类:
1. Subject(主题)
知道它的观察者(观察者必须实现了一定的接口),可以有任意多个观察者。
提供注册和注销观察者的接口
2. Observer(观察者)
为那些在主题发生变化时需要获得通知的对象定义一个更新(update)接口。
3. ConcreteSubject(具体主题)
保持实际状态数据,当状态发生变化时通知各观察者
4. ConcreteObserver (具体观察者)
维持一个指向具体主题对象的引用
存储有关状态
实现Observer的更新接口,使自身状态与主题状态保持一致
3、观察者模式示例
下面用一个订阅杂志的例子来展示观察者模式。在订阅杂志后,每当有新杂志进行发布都要讲新杂志发送给每一位订阅者
先来看一下两个接口:
public interface Observer {
void update(String mes);
String getName();
}
public interface Magazine {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
两个接口比较简单,只定义了一些简单的方法,来看一下具体的实现类:
public class ObserverA implements Observer {
private String name;
public ObserverA(String name){
this.name = name;}
@Override
public void update(String mes) {
System.out.println("我是" + name