0% ont trouvé ce document utile (0 vote)
22 vues6 pages

Cours Design Patters

Le patron de conception Singleton garantit qu'une classe n'a qu'une seule instance et fournit un accès global à celle-ci. Il est couramment utilisé dans le JDK pour gérer des ressources uniques, comme java.awt.Desktop et Runtime. Plusieurs implémentations existent, chacune ayant ses avantages et inconvénients en termes de gestion de l'unicité et de performance.

Transféré par

gogep95741
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • Modèle de conception,
  • Applications Java,
  • Accès à l'environnement,
  • Multithreading,
  • Complexité d'implantation,
  • Méthodes d'instance,
  • Java,
  • Classe Runtime,
  • Design Patterns,
  • Accès exclusif
0% ont trouvé ce document utile (0 vote)
22 vues6 pages

Cours Design Patters

Le patron de conception Singleton garantit qu'une classe n'a qu'une seule instance et fournit un accès global à celle-ci. Il est couramment utilisé dans le JDK pour gérer des ressources uniques, comme java.awt.Desktop et Runtime. Plusieurs implémentations existent, chacune ayant ses avantages et inconvénients en termes de gestion de l'unicité et de performance.

Transféré par

gogep95741
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • Modèle de conception,
  • Applications Java,
  • Accès à l'environnement,
  • Multithreading,
  • Complexité d'implantation,
  • Méthodes d'instance,
  • Java,
  • Classe Runtime,
  • Design Patterns,
  • Accès exclusif

21/01/2024

Patron de conception Singleton

❖Type du pattern: Créationnel

❖Nom: Singleton

❖Thématique: Unicité de l’instance d’une classe.


❖Raison d’être: Garantir qu’une classe a au plus une instance et
fournir un accès global à cet objet.

2023-2024 Design Patterns 118

Patron de conception Singleton


❖Le patron Singleton est souvent utilisé dans le JDK.
❖En particulier, pour donner accès à des ressources d’utilité générale qui
n’existent par nature qu’à un seul exemplaire.
❖la classe java.awt.Desktop est associée au bureau du système et
permet de lancer les applications associées.
❖Cette classe n’a pas de constructeur public et l’accès à l'unique instance
de Desktop se fait par la méthode statique Desktop getDesktop().
❖À partir de cette instance unique, le programme peut accéder à de
nombreuses méthodes d'instance comme
❖public void browse(URI uri) qui affiche dans le navigateur par
défaut la page dont l’adresse est fournie ou
❖public void edit(File file) qui affiche le fichier dans l’éditeur de texte
par défaut.
2023-2024 Design Patterns 119

1
21/01/2024

Patron de conception Singleton


❖La classe Runtime donne accès à l’environnement dans lequel tourne
l’application Java.
❖Cette classe n’a pas de constructeur public et l’accès à l’unique instance de
❖Runtime se fait par la méthode statique Runtime getRuntime(). À partir de
cette instance unique, le programme peut accéder à de nombreuses
méthodes d’instance comme
❖public int availableProcessors() qui donne le nombre de cœurs
disponibles pour la machine virtuelle Java ou
❖public long freeMemory() qui donne une approximation de la quantité
de mémoire disponible à cet instant pour créer des objets, mesurée en
octets.

2023-2024 Design Patterns 120

Patron de conception Singleton


Exemple : affichage d’informations
On veut afficher le nombre de
cœurs et le nombre d’octets
disponibles en mémoire puis ouvrir
le navigateur et l’éditeur de texte
par défaut.

2023-2024 Design Patterns 121

2
21/01/2024

Patron de conception Singleton


Définition

Le schéma de classes du patron Singleton est


très simple. La classe Singleton fournit un accès
global à la méthode statique getInstance qui
retourne l’instance unique stockée dans un
attribut privé. Le constructeur étant privé,
getInstance peut assurer l’unicité de l’instance.

2023-2024 Design Patterns 122

Patron de conception Singleton


En effet, un constructeur privé interdit de dériver (hériter) de la classe
Singleton. La sous-classe ne peut pas appeler le constructeur privé de sa
superclasse par super() et ne peut donc pas créer d’instance. On peut le
rendre plus explicite en ajoutant final à la classe Singleton. Cette simplicité du
schéma de classes cache une complexité d’implantation réelle. Il existe de
nombreuses implantations possibles en Java, plus ou moins simples et
efficaces. Voici les trois plus fréquentes.

2023-2024 Design Patterns 123

3
21/01/2024

Patron de conception Singleton

Dans cette version, l’instance est créée lors de sa première utilisation. Mais dans un
programme où plusieurs threads accèdent au singleton, l’unicité n’est pas garantie
comme le montre la figure suivante où deux singletons sont créés.
2023-2024 Design Patterns 124

Patron de conception Singleton

Dans cette deuxième version, l’instance est créée au chargement de la classe ce qui
garantit l’unicité (l’application n’est pas encore démarrée). Par contre, l’instance est créée
même si elle n’est jamais utilisée, ce qui peut être gênant dans quelques cas si cette
instanciation est coûteuse. Cette solution est cependant celle qui est à privilégier dans la
majorité des cas.
2023-2024 Design Patterns 125

4
21/01/2024

Patron de conception Singleton

Dans cette troisième version, la méthode d’accès est synchronisée, ce qui autorise un
seulthread à l’exécuter à tout instant. C’est une solution également imparfaite, car l’accès
estlimité aussi bien pour les lectures du singleton que pour l’unique création. Or, seule
cettedernière opération nécessite un accès exclusif.

2023-2024 Design Patterns 126

Patron de conception Singleton


On veut réaliser la journalisation des mouvements (dépôt, retrait) des comptes d’une
entreprise. La classe Compte dispose d’un solde et de méthodes de dépôt et de retrait. Un
journal doit enregistrer les mouvements effectivement réalisés de tous les comptes et doit
pouvoir les afficher. Il est fondamental d’assurer l’unicité du journal pour que la trace de
tous les mouvements de tous les comptes y soit conservée. On en fait un singleton. Il est
mis à jour à chaque dépôt ou retrait d’un compte. Ce journal sera certainement exploité
par d’autres classes et l’accès global est très pratique :il est inutile de passer l’objet journal
à ces classes. Seule la visibilité de la classe Journal est nécessaire, comme on peut le voir
dans la classe TestJournal.

2023-2024 Design Patterns 127

5
21/01/2024

Patron de conception Singleton


Exemple
On veut réaliser la journalisation des mouvements (dépôt, retrait) des comptes d’une
entreprise. La classe Compte dispose d’un solde et de méthodes de dépôt et de retrait. Un
journal doit enregistrer les mouvements effectivement réalisés de tous les comptes et doit
pouvoir les afficher. Il est fondamental d’assurer l’unicité du journal pour que la trace de
tous les mouvements de tous les comptes y soit conservée. On en fait un singleton. Il est
mis à jour à chaque dépôt ou retrait d’un compte. Ce journal sera certainement exploité
par d’autres classes et l’accès global est très pratique :il est inutile de passer l’objet journal
à ces classes. Seule la visibilité de la classe Journal est nécessaire, comme on peut le voir
dans la classe TestJournal.
2023-2024 Design Patterns 128

Vous aimerez peut-être aussi