<! - Beschreibung des Anfangs und der Gliederung-> Tauchen Sie ein in die folgenden Inhalte, die in Effective Java 2nd Edition P6 enthalten sind.
Die Fähigkeit statischer Factory-Methoden, dasselbe Objekt zurückzugeben, unabhängig davon, wie oft es aufgerufen wird, kann auch verwendet werden, um genau zu steuern, welche Instanzen zu einem bestimmten Zeitpunkt vorhanden sind. Die Klasse, die dieses Steuerelement ausführt, wird als ** instanzgesteuert ** (instanzgesteuert) bezeichnet.
<! - Titel und Ankernamen bearbeiten->
a == b
), ist auch der Inhalt der Instanzen gleich (a.equal (b)
).==
anstelle von gleich (Objekt)
zu vergleichen.Eine Klasse, die garantiert ** 1 ** Instanzen hat.
Das Folgende ist ein Beschreibungsbeispiel in Java
Singleton.cs
//In Enum implementiertes Muster
//Versiegelt, um eine nicht vererbbare Klasse zu werden
public class SingletonClass
{
//Verhindern Sie, dass es von außen verändert wird
private static final SingletonClass INSTANCE = new SingletonClass();
//Verhindern Sie, dass es von außen erzeugt wird
private SingletonClass() { //Initialisierungsprozess};
//Bekomme Instanz
public static SingletonClass GetInstance() {return INSTANCE;}
}
Das Folgende ist ein Beschreibungsbeispiel in C #
Singleton.cs
//Singleton-Muster
public class SingletonClass
{
//Verhindern Sie, dass es von außen verändert wird
private static SingletonClass _singleInstance = new SingletonClass();
//Bekomme Instanz
public static SingletonClass GetInstance(){ return _singleInstance; }
//Verhindern Sie, dass es von außen erzeugt wird
private SingletonClass(){ //Initialisierungsprozess}
}
Enum Eine Klasse, die garantiert ** n ** Instanzen hat. ** * Ergänzung: Nur Java ** </ font>
Enum.java
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Nachtrag: Es ist jedoch nicht garantiert, dass C # Enum n Instanzen enthält **. ** ** ** Im Gegensatz zu Java, das als Klasse implementiert ist, ist Enum in C # nur eine benannte Ganzzahl, wie der C-Aufzählungstyp. Daher gibt es keine Java-ähnliche Garantie. Weitere Informationen finden Sie im Kommentarbereich.
Es ist eine Schlange, aber ich bin neugierig, also werde ich nachforschen. In Java können Sie einen Singleton mit Enum wie folgt implementieren.
EnumSingleton.java
public enum Singleton {
INSTANCE;
public void execute (String arg) {
//Implementieren Sie die gewünschte Verarbeitung, z. B. die Instanzerfassung
}
}
Ist es möglich, Singleton mit Enum auch in C # zu implementieren? Das ist zweifelhaft. ~~ Als Ergebnis der Untersuchung stellte sich heraus, dass ** C # keine Felder und Methoden in Enum selbst definieren kann, so dass es schwierig ist, Singleton wie Java zu machen. ** ** ** Wenn Sie es mit Enum implementieren möchten, müssen Sie die ** Erweiterungsmethode ** verwenden, wie unten gezeigt ~~ Nachtrag: Wie im Kommentar erwähnt, ist Enum in C # nur eine benannte Ganzzahl, daher können wir die Begrenzung der Anzahl der Instanzen nicht garantieren. Daher kann ** C # Singleton nicht mit Enum ** implementieren
Recommended Posts