欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
观察者(Observer)模式的定义:
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,
所有依赖于它的对象都得到通知并被自动更新。
这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。
抽象主题(Subject)角色:
也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,
以及通知所有观察者的抽象方法。
具体主题(Concrete Subject)角色:
也叫具体目标类,它实现抽象目标中的通知方法,
当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
抽象观察者(Observer)角色:
它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
具体观察者(Concrete Observer)角色:
实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
1 import java.util.ArrayList;
2 import java.util.List;
3
4 public class Observer {
5 public static void main(String[] args) {
6 Subjecting sub = new ConcreteSubject();
7 sub.add(new Observering1());
8 sub.add(new Observering2());
9 ((ConcreteSubject) sub).change("变天啦");
10 }
11 }
12
13 //首先是一个被观察者的父类,它维护了装有观察者引用集合的功能。
14 abstract class Subjecting {
15 //观察者集合
16 private List<Observering> arr = new ArrayList<Observering>();
17
18 public void add(Observering ob) {
19 arr.add(ob);
20 }
21
22 public void remove(Observering ob) {
23 arr.remove(ob);
24 }
25
26 //通知观察者
27 public void update(String newstatue) {
28 for (int i = 0; i < arr.size(); i++) {
29 Observering observering = arr.get(i);
30 observering.update(newstatue);
31 }
32 }
33 }
34
35 //具体的被观察者对象
36 class ConcreteSubject extends Subjecting {
37 private String statue;
38
39 public String getStatue() {
40 return statue;
41 }
42
43 public void setStatue(String statue) {
44 this.statue = statue;
45 }
46
47 public void change(String statuee) {
48 statue = statuee;
49 update(statuee);
50 }
51 }
52
53 //观察者
54 interface Observering {
55 public void update(String statue);
56 }
57
58 class Observering1 implements Observering {
59 private String statue;
60
61 @Override
62 public void update(String statuee) {
63 statue = statuee;
64 System.out.println(statuee + "---快走");
65 }
66 }
67
68 class Observering2 implements Observering {
69 private String statue;
70
71 @Override
72 public void update(String statuee) {
73 statue = statuee;
74 System.out.println(statuee + "--快----跑---");
75 }
76 }