[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
相关文章
- 十九、命令模式 ( Command Pattern )
- 二十五、状态模式 ( State Pattern )
- 二十六、空对象模式 ( Null Object Pattern )
- 征稿通知丨Pattern Recognition图机器学习踊跃投稿中!
- 责任链模式 Chain of Responsibility Pattern
- ORA-22828: input pattern or replacement parameters exceed 32K size limit ORACLE 报错 故障修复 远程处理
- ORA-26766: Unexpected redo pattern encountered by LogMiner ORACLE 报错 故障修复 远程处理
- ORA-55368: empty match or apply pattern not allowed in a VPD constraint ORACLE 报错 故障修复 远程处理
- Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern详解编程语言
- servlet的url-pattern匹配规则详细描述详解编程语言
- javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url详解编程语言
- Mastering Regex on Linux: Tips and Tricks for Efficient Pattern Matching(regexlinux)
- 对squid中refresh_pattern的一些理解和建议
- JAVA正则表达式Pattern和Matcher