zl程序教程

您现在的位置是:首页 >  其它

当前栏目

[Pattern] Flyweight

pattern
2023-09-14 09:00:45 时间

Reuse existing instances when working with identical objects

The flyweight pattern is useful when you're creating a huge number of objects, which could potentially drain all available RAM,

It allows us to minimize the amount of consumed memory.

In JavaScript, we can easily solve this problem through prototypal inheritance. Nowadays, hardware has GBs of RAM, which makes the flyweight pattern less important.

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;
};

const bookList = [];

const addBook = (title, author, isbn, availability, sales) => {
  const book = {
    ...createBook(title, author, isbn),
    sales,
    availability,
    isbn
  };

  bookList.push(book);
  return book;
};

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);

// Although there are 5 copies, we only have 3 Book instances!
console.log("Total amount of copies: ", bookList.length); // 5
console.log("Total amount of books: ", isbnNumbers.size); // 3