设计模式之观察者模式
观察者模式
1. 什么是观察者模式
作为家长和老师都很关心孩子的成长,必然都会想关注孩子的一举一动,于是就通过一个神奇的东西还监控孩子的一举一动。
这种行为就叫做观察者模式
- 定义
对象间一种一对多的依赖关系,使得每
当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
2. 实现观察孩子
2.1 类图
2.2 实现
观察者:老师,妈妈,爸爸
观察者抽象类
public abstract class Observer {
abstract void getStudentAction(String action);
}
老师
public class TeacherObserver extends Observer {
@Override
void getStudentAction(String action) {
System.out.println("老师看到孩子:" + action);
}
}
爸爸
public class FatherObserver extends Observer {
@Override
void getStudentAction(String action) {
System.out.println("爸爸看到孩子:" + action);
}
}
妈妈
public class MotherObserver extends Observer{
@Override
void getStudentAction(String action) {
System.out.println("妈妈看到孩子:" + action);
}
}
被观察者:孩子
观察者通用的方法,添加观察者,删除观察者,通知观察者
public abstract class Subject {
private List<Observer> list = new ArrayList<>();
public void addObserver(Observer observer) {
list.add(observer);
}
public void deleteObserver(Observer observer) {
list.remove(observer);
}
public void notifyObservers(String action) {
if (!list.isEmpty()) {
list.forEach(observer -> observer.getStudentAction(action));
}
}
}
孩子
public class Children extends Subject{
public void action(String action) {
System.out.println("孩子开始" + action);
super.notifyObservers(action);
}
}
测试
public static void main(String[] args) throws InterruptedException {
Observer father = new FatherObserver();
Observer mother = new MotherObserver();
Observer teacher = new TeacherObserver();
Children children = new Children();
//添加观察者
children.addObserver(father);
children.addObserver(mother);
children.addObserver(teacher);
children.action("玩王者荣耀");
Thread.sleep(2000);
children.action("学习");
children.deleteObserver(teacher);
Thread.sleep(2000);
children.action("睡觉");
}
结果