观察者模式

设计模式/行为型设计模式

简述

定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听。
当这个主题对象状态变化时,会通知所有观察者对象并作出相应处理逻辑

UML图

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 食物 抽象被观察者角色
public interface Food {
boolean addAnimal(Animal animal);

boolean deleteAnimal(Animal animal);

void notifyAnimal();
}

// 猫粮 具体被观察者角色
public class CatFood implements Food {
private List<Animal> animals = new ArrayList<>();

@Override
public boolean addAnimal(Animal animal) {
return animals.add(animal);
}

@Override
public boolean deleteAnimal(Animal animal) {
return animals.remove(animal);
}

@Override
public void notifyAnimal() {
animals.forEach(animal -> {
if (animal instanceof Cat) {
animal.run();
}
});
}
}

// 客户端
public class Client {
public static void main(String[] args) {
Food food = new CatFood();
Cat cat1 = new Cat();
Cat cat2 = new Cat();
Dog dog = new Dog();
food.addAnimal(cat1);
food.addAnimal(cat2);
food.addAnimal(dog);
food.notifyAnimal();
food.deleteAnimal(cat1);
food.notifyAnimal();
}
}