Design Pattern Singleton
Rappel
Intention
• Garantir qu'une classe n'a qu'une seule instance et fournir un point d'accès global à cette instance.
Indications d'utilisation
• Il doit y avoir exactement une instance d'une classe ; • cette instance est accessible globalement.
Exemple d'application
• Fenêtre principale d'une interface homme-machine (IHM) • Accès à un fichier de configuration • Accès à une base de données
Pattern
• Constructeur privé • Instance en tant qu'attribut statique de la classe • Méthode statique d'accès à l'instance
Implémentation en Java
Voici une solution inspirée du pattern Singleton :
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public final synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Design Pattern Composite
Rappel
Intention
• Représenter une hiérarchie d'objets en permettant à un objet client de traiter de manière unique les objets élémentaires et les combinaisons de ceux-ci.
Indications d'utilisation
• Représentation de structures récursives ; • traitement uniforme de tous les objets du composite, qu'ils soient terminaux ou non.
Exercice 1 : Système de gestion de fichiers
Les fichiers, raccourcis et répertoires sont contenus dans des répertoires et possèdent un nom. Un raccourci peut concerner un fichier ou un répertoire. Au sein d'un répertoire donné, un nom ne peut identifier qu'un seul élément (fichier, sous-répertoire ou raccourci).
Exercice 2 : Listes d'entiers
Proposez une implémentation récursive des fonctions suivantes :
- append : ListeDEntier × ListeDEntier → ListeDEntier : concatène deux listes en une seule.
- putlast : ListeDEntier × int → ListeDEntier : ajoute un entier à la fin de la liste.
- reverse : ListeDEntier → ListeDEntier : produit une nouvelle liste inversée.
Exercice 3 : Polynômes à une variable réelle
Question 1 : Définition des classes
• Classe de variable • Classe de constante (float) • Classe de monôme • Classe des polynômes
Opérations à implémenter :
- getZero : une référence sur le polynôme null créé suivant le principe du singleton.
- sameVariable : teste si le polynôme a la même variable que le monôme argument.
- degree : calcule le degré du polynôme.
- compute : calcule la valeur du polynôme pour une valeur donnée de la variable.
- derivation : Polynôme × float → float : approximation raisonnable de la dérivée en un point.
Question 2 : Utilisation du patron Composite
Un monôme seul peut être considéré comme le polynôme réduit à ce monôme, et une constante comme un polynôme réduit à un monôme de degré 0. Les monômes d'un polynôme à plusieurs termes sont mémorisés en ordre strictement décroissant des puissances (forme normale).
Question 3 : Implémentation récursive
Implémentez récursivement les méthodes : sameVariable, compute et derivation.
FAQ
Quelle est la différence entre Singleton et Composite ?
Singleton garantit une seule instance d'une classe avec un accès global, tandis que Composite permet de traiter uniformément des objets individuels et des groupes d'objets.
Pourquoi utiliser le patron Singleton pour le polynôme null ?
Le polynôme null doit être unique pour éviter les incohérences dans les calculs et les comparaisons, d'où l'utilisation du pattern Singleton.
Comment garantir l'ordre décroissant des monômes dans un polynôme ?
En triant les monômes lors de leur insertion ou en les ajoutant directement dans l'ordre décroissant lors de la construction du polynôme.