> ## Content Index
> Fetch the complete content index at: https://www.sfeir.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Les designs patterns de création - Singleton
- URL: https://www.sfeir.dev/back/design-pattern-singleton/
- Published: 2023-06-09T08:24:55.000Z
- Updated: 2025-03-21T13:43:12.000Z
- Description: Garantissez qu'une classe ne dispose que d'une instance unique grace au design pattern Singleton
- Author: Erwan Le Tutour
- Tags: Back, Java, Design pattern

[Les Design Patterns](https://www.sfeir.dev/back/kesaco-designs-pattern/) de Création sont un ensemble de design patterns qui permettent de créer des objets d'une manière qui soit flexible, modulaire et qui facilite leur réutilisation. Ils sont utilisés pour résoudre des problèmes de conception liés à la création d'objets.  
Les designs pattern de création les plus utilisés sont les suivants :

- [Factory](https://www.sfeir.dev/back/design-pattern-factory/)
- [Builder](https://www.sfeir.dev/les-designs-patterns-de-creation-builder/)
- [Prototype](https://www.sfeir.dev/back/les-designs-patterns-de-creation-prototype/)
- **Singleton**

Ici nous nous attaquerons au **design pattern singleton**.

## Le design pattern Singleton

### Définition

En programmation orientée objet, le design pattern Singleton est utilisé pour s'assurer qu'une classe ne possède qu'une seule instance et pour fournir un point d'accès à cette unique instance.

### Exemple d'implémentation

![singleton](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2023/06/singleton.png)

Ici notre **singleton** sera la classe Sun

```java
public class Sun {

    private static Sun instance;
    private String name;

    private Sun(String name) {
        this.name = name;
    }

    public static Sun getInstance() {
        return instance==null?instance = new Sun("Sun"):instance;
    }

    public String getName() {
        return name;
    }
}

```

Dans cette implémentation, la classe Sun possède une variable statique instance qui est initialisée à null. Le constructeur de la classe est privé, ce qui signifie qu'il ne peut être invoqué que de l'intérieur de la classe elle-même.

La méthode **getInstance()** est utilisée pour obtenir l'instance unique de la classe Sun. Elle vérifie si l'instance est déjà créée. Si ce n'est pas le cas, elle l'initialise.

Une fois l'instance créée, la méthode **getInstance()** retourne cette instance unique. Les appels ultérieurs à **getInstance()** renverront simplement cette même instance sans créer de nouvelles instances supplémentaires.

Nous allons créer également deux instances de planètes (Terre et Mars), puis les faire orbiter autour du solei avec leur méthode **orbit()**.

```java
public class Planet {
    private String name;

    public Planet(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void orbit(Sun sun) {
        System.out.println(name + " is orbiting around " + sun.getName());
    }
}

```

Dans la classe **SolarSystem** qui contient notre méthode main, nous appelons *Sun.getInstance()* pour obtenir l'instance unique du soleil. Ensuite, nous créons les instances de **Planet** (Terre et Mars) et les faisons orbiter autour du soleil en utilisant la méthode orbit().

L'utilisation du **Singleton** ici garantit qu'il n'y a qu'une seule instance du soleil dans tout le système solaire.