[JAVA] Singleton-Muster

Singleton-Muster

Ein Muster, das garantiert, dass es nur eine Instanz gibt.

Die Rolle von Singleton

Die Rolle von Singleton verfügt über eine statische Methode zum Abrufen einer einzelnen Instanz. Diese Methode gibt immer dieselbe Instanz zurück.

package singleton;

public class Singleton {
	private static Singleton singleton = new Singleton();

    //Verbieten Sie das Aufrufen des Konstruktors von außerhalb der Klasse, indem Sie den Konstruktor privat machen
	private Singleton() {
		System.out.println("Instanz erstellt");
	}

    //Geben Sie eine statische Methode an, die eine Instanz zurückgibt
	public static Singleton getInstance() {
		return singleton;
	}
}

Anrufer

package singleton;

public class Main {

	public static void main(String[] args) {
		System.out.println("Start");
		Singleton obj1 = Singleton.getInstance();
		Singleton obj2 = Singleton.getInstance();
		if (obj1 == obj2) {
			System.out.println("Gleiche Instanz");
		} else {
			System.out.println("Nicht die gleiche Instanz");
		}
		System.out.println("End");
	}
}

// Start
//Instanz erstellt
//Gleiche Instanz
// End

Stichprobe

package singleton;

public class TicketMaker {
	private static TicketMaker ticketMaker = new TicketMaker();
	private int ticket = 1000;
	private TicketMaker() {
	}

	public static TicketMaker getInstance() {
		return ticketMaker;
	}

	//Grant synchronisiert, damit es auch dann ordnungsgemäß funktioniert, wenn es von mehreren Threads aufgerufen wird
	public synchronized int getNextTiketNumber() {
		return ticket++;
	}
}

Eine Klasse mit einer begrenzten Anzahl von Instanzen

package singleton;

public class Triple {
	private static Triple[] triples = new Triple[] {
			new Triple(0),
			new Triple(1),
			new Triple(2),
	};

	private int id;

	private Triple(int id) {
		System.out.println("The instance" + id + " is created");
		this.id = id;
	}

	public static Triple getInstance(int id) {
		return triples[id];
	}

	public String toString() {
		return "[Triple id = " + id + "]";
	}

}
package singleton;

public class Main {

	public static void main(String[] args) {
		System.out.println("Start");
		for (int i = 0; i < 9; i++) {
			Triple triple = Triple.getInstance(i % 3);
			System.out.println(i + ":" + triple);

		}
		System.out.println("End");

	}
}
// Start
// The instance0 is created
// The instance1 is created
// The instance2 is created
// 0:[Triple id = 0]
// 1:[Triple id = 1]
// 2:[Triple id = 2]
// 3:[Triple id = 0]
// 4:[Triple id = 1]
// 5:[Triple id = 2]
// 6:[Triple id = 0]
// 7:[Triple id = 1]
// 8:[Triple id = 2]
// End

Recommended Posts

Singleton-Muster
Singleton-Muster
Entwurfsmuster ~ Singleton ~
[Java] Singleton-Muster
Prototypmuster
Erinnerungsmuster
Iteratormuster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Prototypmuster
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
abstraktes Fabrikmuster
Entwurfsmuster ~ Builder ~
[Java] Strategiemuster
Java-Entwurfsmuster
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Factory Method Pattern
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Abstraktes Fabrikmuster
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Dekorateur ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Interpreter ~
Factory Method Muster
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
[Java] Adaptermuster
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
Java-Muster-Memo