背景资料
这也是程序设计模式系列第十三节,学习培训是指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究竟差在哪儿
各类活动
文中已经参与「」