patterns

lxf2023-05-04 23:36:01

背景资料

这也是程序设计模式系列第十三节,学习培训是指patterns.dev里程序设计模式中享元模式具体内容,因为是材料是英语版,所以我的学习心得就含有汉语翻译的特性,但是并不是汉语翻译,纪录的是自己学习的过程与理解

有关程序设计模式前十二节内容,在文尾会出现直通连接。

简约释意

在对待同一目标的差异的状态下,重复使用已经有案例目标。

写在前面

享元模式使用很多同一目标时,是一种很高效的节省运行内存提高性能的形式。

例如,在一个程序中,用户可加上书本,所有书籍都是有文章标题,创作者,和统一的书号;但是一本往往会有好几个团本

对于每一个团本建立一个新的书本案例,这是一个合理的处理方式,而重复使用现有的实例目标是很好用的。我们通过Book的构造函数建立好几个实例对象

class Book {
  constructor(title, author, isbn) {
    this.title = title;
    this.author = author;
    this.isbn = isbn;
  }
}

下面我们就来新增加一个作用:把新小说加上到目录,假如书号已经出现Map当中,咱们就用不着建立一个新的实例目标,立即重复使用已经有实例对象:

const books = new Map();

const createBook = (title, author, isbn) => {
  const existingBook = books.has(isbn);
  if (existingBook) {
    return books.get(isbn);
  }
  const book = new Book(title, author, isbn);
  books.set(isbn, book);
  return book;
};

自然,假如书号不见在,咱们就建立书本目标加上到以书号isBn为键的Map结合里。

一般会有好几个阅读者同一这书,这个就必须纪录同一本书的好几个团本,这时候就可以将这种团本加上到一个二维数组中,便捷统一管理。

const bookList = [];
const addBook = (title, author, isbn, availability, sales) => {
  const book = {
    ...createBook(title, author, isbn),
    sales,
    availability,
    isbn,
  };
  bookList.push(book);
  return book;
};

那样每一次新增加一个阅读者,添加一个团本的时候就不容易盲目的新增加一本书了,进而最大程度重复使用已存有的book实例对象;

下面,我们一起来建立5个团本,一共涉及了3这书:

addBook("Harry Potter", "JK Rowling", "AB123", false, 100);
addBook("Harry Potter", "JK Rowling", "AB123", true, 50);
addBook("To Kill a Mockingbird", "Harper Lee", "CD345", true, 10);
addBook("To Kill a Mockingbird", "Harper Lee", "CD345", false, 20);
addBook("The Great Gatsby", "F. Scott Fitzgerald", "EF567", false, 20);

如今运行内存中,也就只有5个团本和3这书,而非5这书,线上实例

汇总

享元模式在我们应该建立很多实例对象时,是非常高效的,能够最大程度地降低cpu占用。

只不过在JavaScript中,我们通过原形传承来轻轻松松解决这些问题。在运行内存以GB为单位今日,享元模式正越来越这么重要了。

相关信息

第一节:单例设计模式:分布式系统所造成的数据分析艰难?看着我单例设计模式一招制敌

第二节:替身演员方式:JS和热巴一样有专门替身演员?没听说过的赶紧来补补习...

第三节:经销商方式:仍在逐层传送props?来学习非常好用的经销商方式吧

第四节:原型模式:都清楚JavaScript原形,但程序设计模式中的原型模式你能使用吗?

第五节:主视图逻辑分离出来方式:React Hooks时期,如何完成主视图与逻辑性分离出来呢?

第六节:观察者模式:现在是时候取出高档的技术了————观察者模式

第七节:模块化设计方式:前面性能调优实战篇——动态加载控制模块基本补遗

第八节:混合模式:在React Hook时期,Object.assign这类混和书写还需要使用吗?

第九节:消息中间件方式:怎么使用消息中间件提升多对多通讯?

第十节:高阶组件方式:在React Hooks时期,高阶组件只有感慨:既生瑜何生亮?

第十一节:传送render方式模式:怎样在提高state的等级时,防止父级子组件再次3D渲染难题

第十二节:React Hooks:和React Hook对比class Component究竟差在哪儿

各类活动

文中已经参与「」