当前位置: 首页 > news >正文

深圳市住房建设局网站网站动态与静态

深圳市住房建设局网站,网站动态与静态,网站重构方案,什么网站可以找人做软件Flyweight pattern 享元模式是一种结构化的设计模式,主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。 假设一个国际化特大城市SZ;它有5个区,分别为nanshan、futian、luohu、baoan、longgang;每个区都有多个图…

Flyweight pattern

享元模式是一种结构化的设计模式,主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。

假设一个国际化特大城市SZ;它有5个区,分别为nanshan、futian、luohu、baoan、longgang;每个区都有多个图书馆,每个图书馆都有大量的图书,每种书都会有多本,那么该城市要建一个图书管理系统显然需要非常大的内存资源。通常同一本书会有多本,本文中叫做多个副本,以便表述;例如,《遥远的救世主》这本书总共有100本,我们就说有100个副本。

一本书通常有多个属性,例如,书名、作者、ISBN、图例、所属图书馆、总数量、在馆数量等等。如果每一本书的每一个副本,我们都创建一个对象来进行管理,有些共有的属性所占用的内存是一种显而易见的浪费。那么,在这种场景下,使用享元模式就能极大的优化图书管理系统的内存。所有类似场景使用享元模式都能奏效,如、游戏等。

通过通俗的场景描述了享元模式的作用,接下来,在技术层面来看看要怎样实现。需要说明的是,该模式也可以用于其他设计语言,不限于JS。

首先,创建一个图书类Book

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

如果不用享元模式,我们创建多个副本,简单粗暴可能会这么实现:

const book1 = new Book("遥远的救世主", "豆豆", "abc123");
const book2 = new Book("遥远的救世主", "豆豆", "abc123");
const book3 = new Book("遥远的救世主", "豆豆", "abc123");
const book4 = new Book("遥远的救世主", "豆豆", "abc123");

如果使用享元模式,一种实现方式如下:

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来判断某种图书的唯一性,通过createBook来创建某一种图书。其他的副本我们可以通过addBook来实现:

const bookList = [];const addBook = (title, author, isbn, region) => {const book = {...createBook(title, author, isbn),region};bookList.push(book);return book;
};addBook("遥远的救世主", "豆豆", "AB123", "nanshan");
addBook("遥远的救世主", "豆豆", "AB123", "longgang");
addBook("埃隆·马斯克传", "沃尔特·艾萨克森", "CD123", "nanshan");
addBook("埃隆·马斯克传", "沃尔特·艾萨克森", "CD123", "futian");
addBook("长安的荔枝", "马伯庸", "EF123", "bao'an");console.log("图书总数:", bookList.length);
console.log("图书种类数:", books.size);

运行结果:

请添加图片描述

本文通过通俗的自然语言和实际的代码示例,描述了flyweight pattern的原理和使用场景。可在示例的基础上结合实际场景进行扩展,来完成更复杂的程序设计。

http://www.yayakq.cn/news/841270/

相关文章:

  • 网站集约化建设工作讲话新品发布会宣传文案
  • 网站流量统计工具中国网站设计师
  • 电子商务网站的建设与规划论文wordpress 网银支付
  • 一个网站备案多个域名吗佛山三水建设局网站
  • 网站外包注意事项广告制作公司起名
  • 做外围网站犯法吗重庆荣昌网站建设
  • 申请自助建站走廊文化建设图片网站
  • 360搜索怎么做网站优化建设工程施工合同2021
  • 一号网站建设网站制作WordPress 转 EMLOG
  • wordpress快速仿站杭州余杭做网站公司
  • 36kr网站用什么做的怀化二医院网站
  • 如何编写一套网站模板网站程序哪个好
  • 域名注册好了怎么打开网站全球速卖通下载
  • 乐山市做网站的公司店铺运营思路
  • phpcms 手机网站模板淮北百度seo
  • 深圳科技有限公司 网站建设软件开发工具的根本功能
  • 中国做外贸最好的网站网站年龄和域名年龄
  • 旅游网站建设策划果洛营销网站建设哪家好
  • 网站开发需要看什么书wordpress 新页面打开空白
  • 开发网站费用广东网站备案需要多久
  • 健身俱乐部网站模板2020国内十大小说网站排名
  • 网站必须兼容哪些浏览器家居装修
  • 好的排版设计网站成立公司需要什么材料和手续
  • 为了 门户网站建设dz网站模版
  • 做网站需要收付款功能吗网站404 模板
  • 简述电子商务网站的建设步骤永康网站建设公司
  • 烟台网站建设便宜臻动传媒网站备案 服务内容
  • 国外设计学院网站亚马逊网站首页
  • 怎么申请 免费网站网站建设保报价文档
  • 国外做任务网站有哪些方面凡客网站做SEO能被收录吗