[JAVA] Motif singleton

Motif singleton

Un modèle qui garantit qu'il n'y a qu'une seule instance.

Le rôle de Singleton

Le rôle de Singleton a une méthode statique pour obtenir une seule instance. Cette méthode renvoie toujours la même instance.

package singleton;

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

    //Interdire d'appeler le constructeur depuis l'extérieur de la classe en rendant le constructeur privé
	private Singleton() {
		System.out.println("Créé une instance");
	}

    //Fournir une méthode statique qui renvoie une instance
	public static Singleton getInstance() {
		return singleton;
	}
}

Votre interlocuteur

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("Même instance");
		} else {
			System.out.println("Pas la même instance");
		}
		System.out.println("End");
	}
}

// Start
//Créé une instance
//Même instance
// End

échantillon

package singleton;

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

	public static TicketMaker getInstance() {
		return ticketMaker;
	}

	//Accorder synchronisé pour fonctionner correctement même lorsqu'il est appelé à partir de plusieurs threads
	public synchronized int getNextTiketNumber() {
		return ticket++;
	}
}

Une classe avec un nombre limité d'instances

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

Motif singleton
Motif singleton
Modèle de conception ~ Singleton ~
[Java] Motif singleton
Modèle de prototype
Motif de souvenir
Modèle d'itérateur
Modèle d'observateur
Modèle de constructeur
Modèle de pont
Modèle de commande
Modèle de constructeur
Modèle de stratégie
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Modèle de prototype
Modèle de façade
Motif décorateur
Modèle de poids mouche
Motif décorateur
Modèle de médiateur
Motif de façade
Modèle de visiteur
Modèle de pont
modèle d'usine abstrait
Modèle de conception ~ Constructeur ~
[Java] Modèle de stratégie
Modèle de conception Java
modèle de rappel java
Modèle de conception ~ Proxy ~
Modèle de conception ~ État ~
Modèle de méthode d'usine
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception (1): AbstractFactory
Modèle de conception ~ Commande ~
Modèle d'usine abstraite
Modèle de conception ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de méthode de modèle
Modèle de conception ~ Décorateur ~
Modèle de modèle de méthode
Modèle de conception ~ Interprète ~
Modèle de méthode d'usine
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
[Java] Modèle d'adaptateur
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Mémo de modèle Java