"use strict"; class DatabaseManager { read(id) { /* abstract */ } save(data) { /* abstract */ } update(id, data) { /* abstract */ } delete(id) { /* abstract */ } } class MySQlDatabase extends DatabaseManager { constructor() { super(); this.items = []; } read(id) { return this.items.filter((i) => i.id === id); } save(data) { let id = this.items.length + 1; data.id = id; this.items.push(data); return id; } update(id, data) { var foundIndex = this.items.findIndex( (x) => x !== undefined && x.id === id ); this.items[foundIndex] = data; return { id }; } delete(id) { this.items = this.items.filter((i) => i.id !== id); return id; } } let database = new MySQlDatabase(); let data = { name: "Ramiro Andrés" }; let id = database.save(data); let itemSaved = database.read(id)[0]; console.log("item Saved:", itemSaved); itemSaved.name = "Ramiro Andrés Bedoya Escobar"; database.update(itemSaved.id, itemSaved); let itemUpdated = database.read(id)[0]; console.log("item updated:", itemUpdated); database.delete(id); let itemDeleted = database.read(id); console.log("item deleted:", itemDeleted); /* DatabaseLoggerDecorator: saving item {"name":"Ramiro Andrés"}. instanceof MySQlDatabase DatabaseLoggerDecorator: getting item 1. instanceof MySQlDatabase item Saved: { name: 'Ramiro Andrés', id: 1 } DatabaseLoggerDecorator: updating item 1 {"name":"Ramiro Andrés Bedoya Escobar","id":1}. instanceof MySQlDatabase DatabaseLoggerDecorator: getting item 1. instanceof MySQlDatabase item updated: { name: 'Ramiro Andrés Bedoya Escobar', id: 1 } DatabaseLoggerDecorator: deleting item 1. instanceof MySQlDatabase DatabaseLoggerDecorator: getting item 1. instanceof MySQlDatabase item deleted: [] */