Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
2
Généralités
La notion de pattern vient dès qu’: on est amené à répéter plusieurs fois le même genre
de tâche. par exemple le même genre de développement logiciel
avec le même genre de problème à résoudre.
3
Singleton
4
Singleton
Intention
• S’assurer qu’une classe a une seule instance, et fournir un point d’accès global à celle-ci.
• Variable globale « améliorée »
Utilisations connus
• Un seul window manager, un seul point d’accès à une base de donnée, DefaultToolkit en AWT/Java, etc.
Patterns associés
• Abstract Factory, Builder, Prototype
5
Singleton
Problème
• Il est souvent important pour une classe de n’avoir qu’une instance qui doit être accessible de manière connue (facilement accessible).
• Lorsque l’instance unique doit être extensible par héritage, et que les clients doivent pouvoir utiliser cette instance étendue sans modifier leur code
• Une variable globale n’est pas suffisamment flexible
6
Singleton
Problème
• Il est souvent important pour une classe de n’avoir qu’une instance qui doit être accessible de manière connue (facilement accessible).
• Lorsque l’instance unique doit être extensible par héritage, et que les clients doivent pouvoir utiliser cette instance étendue sans modifier leur code
• Une variable globale n’est pas suffisamment flexible
7
Singleton
Solution
• Assurer une instance unique en cachant le mécanisme de création (constructeur privé en Java)
• Garder une référence pour l’instance unique (attribut statique privé)
• Créer un point d’accès publique (une méthode qui retourne l’instance unique)
8
Singleton
Solution
• Assurer une instance unique en cachant le mécanisme de création (constructeur privé en Java)
• Garder une référence pour l’instance unique (attribut statique privé)
• Créer un point d’accès publique (une méthode qui retourne l’instance unique)
9
Singleton
Solution Python
class Singleton (object):
instance = None # Attribut statique de classe
def __new__(cls):
"méthode de construction standard Python"
if cls.instance is None:
cls.instance = object.__new__(cls)
return cls.instance
# Utilisation
monSingleton1 = Singleton()
monSingleton2 = Singleton()
# monSingleton1 et monSingleton2 renvoient à la même instance
assert monSingleton1 is monSingleton2
print monSingleton1, monSingleton2
OUTPUT<__main__.Singleton object at 0x7f82ca59cd50> <__main__.Singleton object at 0x7f82ca59cd50>
10
Singleton
Solution Java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton () {}
public static Singleton getInstance() {
return instance;
}
}
11
Consequences
Accès contrôlé
Pas de variable globale
Permet la spécialisation des opérations et de la représentation
Permet un nombre variable d’instances (variante de Singleton)
Plus flexible que les méthodes de classe
12
Exercice
Proposez une implémentation d'une application qui veut créer un seul point au pilote de la carte son, en se basant sur le patron singleton.
13
Patron de Structure
14
•Patrons de Structure
Composition de classes et objets pour obtenir des structures plus complexes.
Deux types
• Patron structurel de classe: utilise l’héritage pour composer des interfaces ou des implémentations.
• Patron structurel d’objet décrit: comment composer des objets pour obtenir de nouvelles fonctionnalités, avec possibilité de faire évoluer la composition à l’exécution.
15
Patron de structure
Adapter
• adapter une interface à une autre attendue par la client
Bridge
• découple une abstraction de son implémentation de façon à ce que les deux puissent varier indépendamment
Composite
• composer des objets ensembles (structure d’arbre)
Decorator
• encapsuler dynamiquement des objets et leur fournir de nouvelles fonctions
16
Flyweight
• limiter la prolifération d’instances petites, simples et similaires en factorisant hors des classes des données passées en paramètre lors d’appel de méthode
Proxy
• remplacer un objet le temps de le créer
17
Adapter
18
La réutilisation de code: le code réutilisé doit se conformer à une interface requise
◻
Votre système existant
Classe
propriétaire
Pas de modification du code.
Pas de
Adaptateur Modif ication
19
Adapteur
20
Exemple
class Person:
def __init__(self, nom, prenom):
self.nom = nom
self.prenom = prenom
class personne:
def __init__ (self, nomcomplet):
self.nom = nomcomplet
class adapter(personne):
def __init__(self, person):
#~ self.person = person
self.nom = person.nom +"-"+ person.prenom
def main():
# personne
personOne = Person("Akli", "Mohand")
per = adapter(personOne)
print per.nom
21
Exercice
Une classe DateString donne la date sous forme
“JJ/MM/AAAA”
Une autre classe DateStructure donne la date sous forme d’une structure
* jour
* mois
* année
Créer un adapteur entre les deux classes.