设计模式之观察者模式(5)

简介: 设计模式之观察者模式(5)

1、装饰器模式 ?

1、介绍

  • 装饰器内 会先取得之前的功能 再添加功能

网络异常,图片无法展示
|

  • 使用时需要将 原来的实例 传入 装饰器中

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 动手试试

网络异常,图片无法展示
|

  • 写代码 理解一下
class Circle {
      draw() {
        console.log("画一个五角星");
      }
    }
    class Decorator {
      constructor(circle) {
        this.circle = circle;
      }
      draw() {
        this.circle.draw(); // 原来的功能
        this.setRedBoard(circle); // 新增的装饰器功能
      }
      setRedBoard(circle) {
        console.log("画一个三角形");
      }
    }
    // 测试代码
    // 先看自身功能
    let circle = new Circle();
    circle.draw();
    console.log("---分割线---");
    //装饰器功能
    let dec = new Decorator(circle);
    dec.draw();
复制代码
  • 实现效果

网络异常,图片无法展示
|

2、使用场景展示

  • 装饰器 使用 场景 展示

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 安装插件
yarn add babel-plugin-transform-decorators-legacy --save-dev 
复制代码

网络异常,图片无法展示
|

  • 尝试 写 es7 装饰器

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 理解一下 原理

网络异常,图片无法展示
|

  • 还可 传递 参数

网络异常,图片无法展示
|

  • 还可 使用 mixin

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、装饰器 方法

1、readonly

网络异常,图片无法展示
|

  • 代码展示

网络异常,图片无法展示
|

2、打印 日志

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、core-decorator  第三方库 比较好用

网络异常,图片无法展示
|

  • 安装 yarn add core-decorators --save

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 设计原则

网络异常,图片无法展示
|

2、外观模式 ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、观察者模式(重点 ) ?

1、介绍

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

2、代码展示

// 观察者模式
//  主题  保存状态 当状态 变化后 通知 观察者 对象
class Subject {
  constructor() {
    this.state = 0;
    this.observers = [];
  }
  getState() {
    return this.state;
  }
  setState(state) {
    this.state = state;
    this.notifyAllObservers();
  }
  notifyAllObservers() {
    this.observers.forEach((observer) => {
      observer.update();
    });
  }
  attach(observer) {
    this.observers.push(observer);
  }
}
// 观察者
class Observer {
  constructor(name, subject) {
    this.name = name;
    this.subject = subject;
    this.subject.attach(this); //  将自己 作为观察者 传入 主题中
  }
  update() {
    console.log(`${this.name} update, state: ${this.subject.getState()}`);
  }
}
// 测试
let s = new Subject();
let o1 = new Observer("o1", s);
let o2 = new Observer("o2", s);
let o3 = new Observer("o3", s);
s.setState(1);
复制代码
  • 结果展示
  • 主题的setState使得 state更改时,通知观察者 状态 已经更新

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、重要的 使用 场景

网络异常,图片无法展示
|

  • 网页 事件绑定
    网络异常,图片无法展示
    |

  • Promise

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • jQuery callbacks

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • nodejs自定义事件

1、自定义事件

网络异常,图片无法展示
|

2、 还有一个 继承

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、读取大文件时 使用的文件流

网络异常,图片无法展示
|

4、读取文件有多少行

网络异常,图片无法展示
|

  • 我们去检查一下 文件 看对不对

网络异常,图片无法展示
|

4、其他 场景

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

5、 设计原则验证

网络异常,图片无法展示
|



相关文章
|
1月前
|
设计模式 PHP
php设计模式--观察者模式(4.1)面向过程完成页面内容切换
php设计模式--观察者模式(4.1)面向过程完成页面内容切换
13 0
|
1月前
|
设计模式 监控 安全
设计模式 | 观察者模式
设计模式 | 观察者模式
30 0
|
1月前
|
设计模式 前端开发 数据中心
设计模式之观察者模式
设计模式之观察者模式
|
1月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
1月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1月前
|
设计模式 存储 Java
【设计模式】观察者模式
【设计模式】观察者模式
|
8天前
|
设计模式 前端开发 NoSQL
设计模式第八讲:观察者模式和中介者模式详解
 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
168 0
|
9天前
|
设计模式 消息中间件 存储
跟着GPT学设计模式之观察者模式
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通知并自动更新。一般情况下,被依赖的对象叫作被观察者(Observable),依赖的对象叫作观察者(Observer)。
13 1
|
29天前
|
设计模式 Java
Java一分钟之-设计模式:观察者模式与事件驱动
【5月更文挑战第17天】本文探讨了Java中实现组件间通信的观察者模式和事件驱动编程。观察者模式提供订阅机制,当对象状态改变时通知所有依赖对象。然而,它可能引发性能问题、循环依赖和内存泄漏。代码示例展示了如何实现和避免这些问题。事件驱动编程则响应用户输入和系统事件,但回调地狱和同步/异步混淆可能造成困扰。JavaFX事件驱动示例解释了如何处理事件。理解这两种模式有助于编写健壮的程序。
25 1
|
1月前
|
设计模式 JavaScript 前端开发
js设计模式-观察者模式与发布/订阅模式
观察者模式和发布/订阅模式是JavaScript中的两种设计模式,用于处理对象间的通信和事件处理。观察者模式中,一个主题对象状态改变会通知所有观察者。实现包括定义主题和观察者对象,以及在主题中添加、删除和通知观察者的功能。发布/订阅模式则引入事件管理器,允许发布者发布事件,订阅者通过订阅接收通知。