1.观察者模式模式简介
观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
Subject:抽象被观察者(目标)
- 一个目标可以被多个观察者观察。目标变化时,目标会通知所有登记的观察者
- 拥有一个抽象观察者的引用
Observer:抽象观察者
- 得到目标的通知时更新自己。
ConcreteSubject:具体被观察者
- 将状态存入具体现察者对象。自己变化时,给所有登记的观察者发出通知
ConcreteObserver:具体观察者
- 拥有一个指向具体目标的引用
2.举例
演员表演
演员为大家表演节目,所有观看的观众会为他进行鼓掌
分析:
观众是观察者,应该实现Observer接口
演员是被观察者,应该继承实现Subject接口
当演员开始表演后,每个观众都会为其鼓掌。
Subject接口
public interface Subject {
void perform();
}
Observer接口
public interface Observer {
void applause();
}
Audience实现类
public class Audience implements Observer{
private int id;
public Audience(int id){
this.id = id;
}
@Override
public void applause() {
System.out.println(id + "号观众为你鼓掌");
}
}
Actor实现类
public class Actor implements Subject{
private List<Audience> audiences = new ArrayList<>();
public void add(Audience audience){
audiences.add(audience);
}
@Override
public void perform() {
System.out.println("我为大家表演节目");
for (Audience audience : audiences) {
audience.applause();
}
}
}
测试类
public class Test {
public static void main(String[] args) {
Actor actor = new Actor();
actor.add(new Audience(1));
actor.add(new Audience(4));
actor.add(new Audience(5));
actor.perform();
}
}