livingrimoire.js
main (app.js)
JavaScript:
// livingrimoire.js
class AbsDictionaryDB {
save(key, value) {
// Save to DB (override me)
}
load(key) {
// Override me
return "null";
}
}
class Mutatable {
constructor() {
this.algKillSwitch = false;
}
// Abstract methods (to be overridden by subclasses)
Action(ear, skin, eye) {
throw new Error('Action method must be overridden');
}
Completed() {
throw new Error('Completed method must be overridden');
}
MyName() {
// Returns the class name
return this.constructor.name;
}
}
module.exports = { AbsDictionaryDB, Mutatable };
JavaScript:
// app.js
const readline = require('readline');
const { AbsDictionaryDB, Mutatable } = require('./livingrimoire');
// Create an instance of AbsDictionaryDB
const db = new AbsDictionaryDB();
// Test the save and load methods
db.save('key1', 'value1');
const value = db.load('key1');
console.log(`Loaded value: ${value}`);
// Create a subclass of Mutatable to test abstract methods
class MyMutatable extends Mutatable {
Action(ear, skin, eye) {
return `Action performed with ${ear}, ${skin}, and ${eye}`;
}
Completed() {
return true;
}
}
const myMutatable = new MyMutatable();
console.log(myMutatable.MyName());
console.log(myMutatable.Action('ear1', 'skin1', 'eye1'));
console.log(`Completed: ${myMutatable.Completed()}`);
// Keep the console open
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Press Enter to exit...', () => {
rl.close();
});