Antwort an „Cornwall Peter“ verfassen

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

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
?0

Vorschau

Schlagwort-Vorschläge

klicken, um das Schlagwort hinzuzufügen
  • keine Vorschläge verfügbar

ausgewählte Schlagwörter

klicken, um ein ausgewähltes Schlagwort zu entfernen
  • programmierstil
  • programmiertechnik

Die Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.