设计模式之观察者模式

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("睡觉");


    }

结果
设计模式之观察者模式