- <!DOCTYPE html>
- <html lang="en">
-     <head>
-         <meta charset="UTF-8" />
-         <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-         <meta http-equiv="X-UA-Compatible" content="ie=edge" />
-         <title>观察者模式</title>
-     </head>
-     <body>
-         <div class="eg2"></div>
-         <script>
-             // 观察者构造函数
-             class Observer {
-                 constructor(name, fn = () => {}) {
-                     this.name = name;
-                     this.fn = fn;
-                 }
-             }
-             // 创建观察者
-             const praepostor = new Observer("级长", (state) => {
-                 console.log(`因为: ${state}, 你是哪个班的`);
-             });
-             const teacher = new Observer("老师", (state) => {
-                 console.log(`因为: ${state}, 把你爸找来`);
-             });
-             const principal = new Observer("校长", (state) => {
-                 console.log(`因为: ${state}, 骂你的班主任`);
-             });
-             // 被观察者的构造函数
-             class Subject {
-                 constructor(state) {
-                     // 记录状态
-                     this.state = state;
-                     // 缓存需要通知被观察者
-                     this.observsers = [];
-                 }
-                 // 设置状态
-                 setState(val) {
-                     this.state = val;
-                     this.observsers.forEach((item) => {
-                         item.fn(this.state);
-                     });
-                 }
-                 addObserver(obs) {
-                     this.observsers = this.observsers.filter((item) => item !== obs);
-                     this.observsers.push(obs);
-                 }
-                 delObserver(obs) {
-                     this.observsers = this.observsers.filter((item) => item !== obs);
-                 }
-             }
-             // 创造一个被观察者
-             const zhangsan = new Subject("学习");
-             zhangsan.addObserver(praepostor);
-             zhangsan.addObserver(teacher);
-             zhangsan.addObserver(principal);
-             const lisi = new Subject("学习");
-             lisi.addObserver(teacher);
-             lisi.addObserver(principal);
-             console.log(zhangsan);
-             console.log(lisi);
-         </script>
-     </body>
- </html>