Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
ACOO
Chapitre 4
II2-ENSI
1
INTRODUCTION
2
DESIGN PATTERN
Les
3
DESCRIPTION DES PATRONS
7
PATRONS DE COMPORTEMENT
Nom : Singleton
Problème : Assurer qu’une classe ne
dispose que d’une unique instance Singleton
Solution :
- instance: Singleton
Rendre privé le constructeur,
Construire une instance privée de la classe -Singleton ()
+ getInstance (): Singleton
comme attribut statique de la classe,
Fournir une méthode publique d’accès à cette
instance.
9
C O D E J AVA S I N G LETON
//La présence d’un constructeu r privé supprime le constructeu r public par défaut
private Singleton () {
}
// Retourne l’unique instance de cette classe .
public static Singleton getInstance ()
{
if (instance == null) instance = new Singleton ( );
return instance ;
}
}
10
CODE JAVA SINGLETON (AUTRE VERSION)
11
EXEMPLES
12
EXERCICE1: JOURNALISATION BANCAIRE
13
SOLUTION1/2
class Journal {
private static Journal instance = null;
private String ch="";
private Journal (){
if (instance == null)
instance = new Journal ();
return (instance);
}
ch+=s +"\n";
}
}
14
SOLUTION2/2
class CompteBanque{
private double solde;
}
void retirer (double m){
solde-= m;
Journal.getInstance().operation("Retrait"+m);
}
}
class Test{
15
COMPOSITE: UN EXEMPLE DE PATRON DE
CONCEPTION STRUCTUREL
Nom : Composite
Problème : établir des structures arborescentes entre des objets et
les traiter uniformément
Solution : Agencer les objets dans une structure en arbre de façon
à définir une hiérarchie.
16
COMPOSITE: UN EXEMPLE DE PATRON DE
CONCEPTION STRUCTUREL
Conséquences :
Hiérarchies de classes dans lesquelles l’ajout de nouveaux
composants est simple: simplification du client qui n’a pas à se
préoccuper de l’objet accédé MAIS il est difficile de restreindre et
de vérifier le type des composants
Exemple :
java.awt.Component
java.awt.Container
17
UN AUTRE EXEMPLE: AWT
Agrégation
ou
composition
EXEMPLE A IMPLEMENTER?
Agrégation
ou
composition
OBSERVER: UN PATRON DE
COMPORTEMENT
Nom: Observer
Problème :
Il est parfois extrêmement utile qu ’un objet puisse suivre en
continu l’état d’un autre objet.
C’est en général à l’objet observé de faire tout le travail consistant
à prévenir ceux qui sont intéressés ( observateurs) par son
changement d’état.
-> Plus il y a d’observateurs, plus l’objet observé se trouve
fortement couplé.
Solution :
Généralisation du savoir-faire de l’Observateur et de l’observé
(classe abstraite ou interface)
Fournir à l’observé (Sujet) une gestion des Observateurs concrets.
Permettre au sujet d’envoyer un message générique de notification
de son changement d’état à tous les Observateurs.
20
LE PATRON DE COMPORTEMENT: OBSERVER
Structure statique
<<Interface>>
21
LE PATRON DE COMPORTEMENT: OBSERVER
Le Sujet
Garde une trace de ses observateurs
Propose des méthodes pour ajouter ou enlever des observateurs
Le sujet concret
C’est l’objet observé
Enregistre son état intéressant les observateurs
Envoie une notification à ces observateurs quand il change d ’état
L’Observateur
Définit une interface pour la notification de mises à jour
L’Observateur concret
Il observe l’objet concret
Il implémente l’interface de mise à jour permettant à son état de
rester consistent avec celui de l’objet observé
Il stocke l’état qui doit rester consistent avec celui de l’objet observé
22
L’OBSERVATEUR ET L’OBSERVÉ GÉNÉRIQUES
interface Observateu r {
public void actualiser (Observé o); // Méthode update
}
abstract class Observé {
private ArrayList tabObserv ateu r = new ArrayList (); // Tableau d'observateu rs.
public void ajouterOb serv ateu r (Ob serv ateu r o) { // Méthode attach
tabObserv ateu r.add (o );
}
public void supprimerOb serv ateu r (Ob serv ateu r o) { //Méthod e detach
tabObserv ateu r.remov e (o ) ;
}
Capitalisation de l’expérience
Un niveau d’abstraction plus élevé => Meilleure qualité
(plus de cohésion et moins de couplage)
Lisibilité et maintenance plus aisées