design patterns - wordpress.com...singleton intention • s’assurer qu’une classe a une seule...

21
Design Patterns Taha Zerrouki [email protected]

Upload: others

Post on 21-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

Design Patterns

Taha [email protected]

Page 2: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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.

Page 3: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

3

Singleton

Page 4: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 5: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 6: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 7: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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)

Page 8: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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)

Page 9: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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>

Page 10: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

10

Singleton

Solution Java

public class Singleton {

private static Singleton instance = new Singleton();

private Singleton () {}

public static Singleton getInstance() {

return instance;

}

}

Page 11: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 12: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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.

Page 13: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

13

Patron de Structure

Page 14: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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.

Page 15: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 16: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 17: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

17

Adapter

Page 18: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 19: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

19

Adapteur

Page 20: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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

Page 21: Design Patterns - WordPress.com...Singleton Intention • S’assurer qu’une classe a une seule instance, et fournir un point d’accès ... accès à une base de donnée, DefaultToolkit

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.