Danke für die fundierte Analyse!
Ich denke, dementsprechend hätten wir es tatsächlich mit einem Singleton zu tun.
Lässt es sich als Best Practice werten, hier eine entsprechend instanzenlose Singleton-Klasse zu kreieren? Würde ich diese dann einfach an Subklassen "durchreichen", frei nach dem [etwas verbosen] Motto:
/* ~~~~ ACTION! (GET TO DA CHOPPA) ~~~~ */
const myClassInstance = new MyClass(Singleton);
myClassInstance.createSubclassInstances(10); // creating 10 instances of SubClass (see below)
myClassInstance.mutateSharedSingleton("myValue"); // "myValue" could be any value: String | Number | Array | Object | Boolean
//
const mySubClassInstance = new SubClass(Singleton);
// !!!!!!!!!!!!!!!
// BOTH methods should now point to the SAME "myValue" (declared above):
myClassInstance.getSharedSingleton();
mySubClassInstance.getSharedSingleton();
//
/* ~~~~ CLASSES! ~~~~ */
class Singleton {
static #singleton = "anyValue"; /* String | Number | Array | Object | Boolean */
static set mutateSingleton(val) {
/* do something with #singleton */
Singleton.#singleton = val; /* | Singleton.#singleton.push(val); | (...) */
}
static get getSingleton() {
return Singleton.#singleton;
}
}
class MyClass {
#sharedSingleton;
#subclassArray = []; /* dependency with subclasses, to make matters even nicer and crispier 😏 */
constructor(sharedSingleton) {
this.#sharedSingleton = sharedSingleton;
}
mutateSharedSingleton(val) {
this.#sharedSingleton.mutateSingleton(val);
}
getSharedSingleton() {
return this.#sharedSingleton.getSingleton();
}
/* dependency with subclasses, to make matters even nicer and crispier 😏 */
createSubclassInstances(num) {
for (let i = 0; i <= num; i++) {
const subClassInstance = new SubClass(this.#sharedSingleton);
this.#subclassArray.push(subClassInstance);
}
}
getSubclassInstances(/* FURTHER... */) {
/* ...LOGIC */
}
treatSubclassInstances(/* FURTHER... */) {
/* ...LOGIC */
}
}
class SubClass {
#sharedSingleton;
constructor(sharedSingleton) {
this.#sharedSingleton = sharedSingleton;
}
mutateSharedSingleton(val) {
this.#sharedSingleton.mutateSingleton(val);
}
getSharedSingleton() {
return this.#sharedSingleton.getSingleton();
}
/* More Code */
}
...? Danke nochmal für eure Gedanken dazu!
LG, Cornwall Peter