7 Möglichkeiten, Singleton in Javascript zu erstellen
Hallo, meine liebsten Bit-Liebhaber . Heute werden wir über das häufigste Element sprechen, das Sie in Ihrem Projekt verwenden können – Singleton Pattern .
Für diejenigen unter Ihnen, die bereits wissen, was Singleton ist, scrollen Sie weiter, ich bin sicher, dieser Artikel wird Sie überraschen.
Für andere…
Singleton-Muster – wird am häufigsten verwendet und ist eines der Dinge, nach denen in fast jedem Vorstellungsgespräch gefragt wird. Es kann als Muster beschrieben werden, das die Verwendung einer Klasse auf eine einzige Verwendung beschränkt. Mit anderen Worten: In Ihrer Anwendung darf nur eine Instanz Ihrer Klasse vorhanden sein.
Da dies geklärt ist, gehen wir zu den Beispielen über.
Dieser Artikel enthält sowohl Javascript- als auch Typescript- Beispiele.
Klassischer Singleton
Die kultigste und klassischste Art, einen Singleton zu implementieren. Beispiele dafür finden Sie in jedem Tutorial und jedem Programmierbuch.
Javascript- Beispiel:
Typoskript- Beispiel:
Und so verwenden Sie es:
ClassicSingleton.instance.invoke();
Vorteile
- Einfache, unkomplizierte und saubere Lösung
- Häufigster Ansatz
- Wird beim Anwendungsstart initialisiert, was zu einer Verlangsamung des Anwendungsstarts führen kann
- Kann nicht ordnungsgemäß vererbt werden, was bedeutet, dass Sie diesen Code in jeder einzelnen Klasse duplizieren müssen, in der Sie Singleton verwenden möchten
Lazy Singleton wird hauptsächlich verwendet, wenn Sie Ihren Singleton nicht sofort initialisieren und ihn nur verwenden möchten, wenn er benötigt wird. Eine gute Möglichkeit zur Mikrooptimierung Ihrer App. In anderen Belangen ist es dem klassischen Singleton nahe .
Javascript- Beispiel:
Typoskript- Beispiel:
Und so verwenden Sie es:
LazySingleton.instance().invoke();
Vorteile
- Wird bei Verwendung initialisiert und belegt keinen Speicher, wenn es nicht aufgerufen wurde
- Einfache und saubere Lösung
- Wird bei der Verwendung initialisiert, was bei der ersten Verwendung zu geringfügigen Verzögerungen führen kann
- Kann nicht vererbt werden, was bedeutet, dass Sie diesen Code in jeder einzelnen Klasse duplizieren müssen, in der Sie Singleton verwenden möchten
Fast das Gleiche wie Lazy Singleton , aber wir verwenden einen Getter anstelle einer einfachen Funktion, wodurch wir die Verwendung unangenehmer Klammern vermeiden können ().
Javascript- Beispiel:
Typoskript- Beispiel:
So verwenden Sie es:
LazyGetterSingleton.instance.invoke();
Es hat die gleichen Vor- und Nachteile wie Lazy Singleton .
Singleton importieren
Man kann nicht sagen, dass dieser Ansatz üblich ist, da nicht jede Programmiersprache dem Paradigma des Exportierens/Importierens von Deklarationen aus Dateien folgt.
Beispiel für Javascript ES6 (Babel):
Beispiel für Javascript (Knoten):
Typoskript- Beispiel:
So verwenden Sie Javascript ES6 (Babel) und die Typescript- Version:
import { importSingletion } from "./ImportSingleton";
importSingleton.invoke();
const importSingleton = require("./ImportSingleton");
importSingleton.invoke()
Vorteile
- Einfache, unkomplizierte und saubere Lösung
- Wird beim Anwendungsstart initialisiert, was zu einer Verlangsamung des Anwendungsstarts führen kann
- Kann nicht automatisiert werden, was zur Duplizierung der Codebasis führt
Dekorateur Singleton
Interessanter Ansatz, wenn Sie zwei Muster zusammen verwenden: Singleton und Decorator .
Die Kernidee besteht darin, die Codeduplizierung zu minimieren.
Javascript- Beispiel:
Sie können es mit Typescript verwenden, aber leider erkennt Typescript standardmäßig keine dynamischen Eigenschaften und Sie müssen zusätzlichen, ziemlich schmutzigen Code schreiben, damit Typescript es unterstützt. Aus diesem Grund ist es vorzuziehen, diesen Ansatz nicht mit Typescript zu verwenden .
So verwenden Sie es:
DecoratorSingleton.instance.invoke();
- Einfache, unkomplizierte und saubere Lösung
- Sie können eine relativ saubere Codebasis beibehalten und Codeduplizierungen vermeiden
- Wird beim Anwendungsstart initialisiert, was zu einer Verlangsamung des Anwendungsstarts führen kann
Cooler Ansatz, der wiederum zwei Muster vereint, Singleton und Decorator , Ihnen aber auch ermöglicht, Ihre Singletons aus einem anderen Blickwinkel zu betrachten. Und als Bonus öffnet sich die Tür zu umfassenden Kenntnissen von Javascript .
Javascript- Beispiel:
Typoskript- Beispiel:
Und so verwenden Sie Javascript- und Typescript- Versionen:
new BindSingleton().invoke()
BindSingleton().invoke()
Sie können die Richtigkeit überprüfen mit:
new ConstructorSingleton() === new ConstructorSingleton() // => true
ConstructorSingleton() === ConstructorSingleton() // => true
Na ja, ganz einfach. Erstens BindSingletonwar unser nie eine Klasse, es ist eine Funktion. Deshalb können wir BindSingleton()es verwenden. Cool, oder?
Was ist nun mit der Frage new BindSingleton(), warum immer wieder dieselbe Instanz zurückgegeben wird? Es ist wieder ziemlich offensichtlich, dass unsere Logik bei der instanceFunktionsprüfung nach statischen Eigenschaften in der Klasse sucht. Wenn die Eigenschaft nicht vorhanden ist, erstellen wir eine Instanz unserer Klasse, und wenn die Eigenschaft vorhanden ist, verwenden wir sie, anstatt eine neue Instanz zu initialisieren.
Vorteile
- Bietet viele Möglichkeiten, wie Sie auf Ihren Singleton zugreifen können
- Gilt als fauler Singleton
- Sie können Ihre Codebasis ziemlich sauber halten
- Erfordert tiefe Kenntnisse von Javascript und kann unerfahrene Entwickler verwirren
- Im Vergleich zu anderen Methoden – viel Code.
Konstrukteur Singleton
Dies erfordert ein wirklich tiefes Verständnis der Funktionsweise von Javascript , ist aber wirklich eine elegante Lösung.
Javascript- Beispiel:
Typoskript-Beispiel:
Und so verwenden Sie es:
new ConstructorSingleton().invoke()
new ConstructorSingleton() === new ConstructorSingleton() // => true
Wenn wir unseren Code zum ersten Mal ausführen, wird er initialisiert cacheund die Instanz erstellt, wenn er erreicht wird constructor, den Rückgabewert überprüft und beim ersten Ausführen den Konstruktor zurückgibt, der Javascriptundefined dazu zwingt , eine neue Instanz der Klasse zu erstellen. Aber alle folgenden Läufe erhalten unsere Instanz und geben unsere Instanz zurück, anstatt dass Javascript anzeigt , dass es unsere vorhandene Instanz zurückgeben soll.cacheconstructorundefined
Nachteile :
- Erfordert tiefe Kenntnisse in Javascript
- Wird beim Anwendungsstart initialisiert, was zu einer Verlangsamung des Anwendungsstarts führen kann
- Kann nicht ordnungsgemäß vererbt werden, was bedeutet, dass Sie diesen Code in jeder einzelnen Klasse duplizieren müssen, in der Sie Singleton verwenden möchten
Ressourcen
- Link zum Repository
Vergessen Sie nicht, mir für mehr zu folgen!
Dein Teil. 01101100 01101111 01110110 01100101

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































