Transcript iterator

Design Pattern

Hichame ELKHALFI

Design pattern de création

     Factory Method Abstract Factory Singleton Builder prototype

Design pattern de structure

     Composite Bridge Decorator Adapter Proxy

Design pattern de comportement

      Iterator Command Mediator State Observer Templatre

Design pattern de BluePrint

   Struts WebServices JSF

Déroulement

  Cours et TP sur machine Seance 5 – contrôle continue

Design pattern de création

   Factory Method Abstract Factory Singleton

Factory Method

   Création indirecte d'instance déléguée au niveau d'une sous classe.

Elle gère les détails de la création des objets.

Exemple pas bon :

VoitureHybride.

Factory Method

   Solution:FactoryMultiMarque Une interface abstraite (Usine) pour crée un produit (Voiture). La spécialisation se fera au niveau des classe factory concrete (FactoryMultiMarque) et des produits concret (407, Serie3).

Abstract Factory

  Instanciation indirecte de familles de produits. (ex: Look & Feel "Windows" ou "X11/Motif").

En changeant de fabrique on génère des objets différents(look1,look2, ....) qui ont néanmoins les mêmes fonctionnalités (même interfaces).

Abstract Factory

  Fournir une interface abstraite pour crée une famille de produit.

FabriqueComposant :   FabriqueComposantSolide    Crée une roue : plate, plastique Crée une planche : en chêne , en plastique Crée une visse : en acier, en bois FabriqueComposantLeger

Singleton

 Garantie qu’il existe au plus une seule instance d’une classe.

 Exemple :   Gestion de pool de connexion.

Factory ^_^

Singleton

   Constructeur privé Méthode d’accès static. Code  Monothread : SingeltonMonoThread  Multithread : SingeltonMultiThread

Builder

  Encapsuler la construction d’un produit et permettre de le construire par étape.

Il ne doit pas être confondu avec une Factory  elle ne permet de définir comment un objet va être construit

Builder

 On peut exploiter les Builder en complément d'une Fabrique. Un Fabrique utilise alors le Builder pour "monter" l'objet retourné.

Prototype

  Créer de nouveaux objets en partant d’objets existants .

En java, on utilise la méthode

clone()

Design pattern de structure

     Bridge Composite Decorator Adapter Proxy

Bridge / Pont

  Découple une abstraction de son implémentation. Ainsi, chacun des éléments pourra se voir modifié indépendamment l'un de l'autre

Bridge/pont

 Exemple télécommande version 1  Exemple télécommande version 2

Composite

  Compose des structures arborescentes pour représenter des hiérarchies composant/composé.

Il permet au client de traiter de la même façon les objets individuels et les combinaisons de ceux-ci.

Composite

 Exemple: 

Carte du restaurant

Menu enfant

 

Menu adulte Dessert

Decorator

 Il ajoute des responsabilités à une classe de manière :  Dynamique : lors du Runtime  Sans trop d’héritage

Decorator

 Exemple :  Machine à café old génération.

boisson café choco lait Chococafe laitsucre the

Decorator

0.38€  Exemple :  Machine à café new génération.

0.05€ Prix() Prix() 0.10€ Sucre Chocolat Prix() café 0.23€

Composant sayHello() execution decorator ExecutionDecorator 1 référence ExecutionDecorator2

Adapter

 Utilisé pour:  Convertir l'interface d'une classe en une autre répondant aux besoins spécifiés par le client.

 Joue le rôle d’intermédiaire entre le client et le fournisseur

Adapter

 Exemple:   Adaptateur Souris : USB – PS/2 Prise électrique : Usa vs EU Client <> Cible Requete() Adaptateur Requete() Adapté RequeteSpécifique()

Proxy

  C’est un remplaçant d’un objet réel.

Il joue le rôle de représentant local d’un objet distant Interface implémente SujetReel utilise implémente Proxy

Proxy

 Exemple:  RMI  Proxy HTTP

Adapter vs Proxy

ADAPTER vs PROXY. ADAPTER et PROXY ont une structure semblable. PROXY préserve l'interface, alors qu' ADAPTER transforme l'interface. En outre, PROXY implique souvent (pas toujours) un accès à distance, alors que ADAPTER est généralement local.

Design pattern de comportement

      Iterator Command Mediator State Observer Template

Iterator

  Pour parcourir un objet composé (ex : une collection) sans exposer la structure interne de celui-ci.

L’iterator encapsule la manière dont une collection va être parcouru.

Iterator

   Ajouter une méthode ‘getIterator’ à la collection.

L’iterator doit avoir des méthodes pour parcourir la collection:  next()    hasNext() last() …… Exemple : java.util.Iterator, java.util.ArrayList

Mediator

receptionEveneemnt(){ verifierCalendrier(); veriierArrosage(); demarrerCafetiere(); } Réveil receptionEveneemnt(){ verifierJour(); programmerArrosage(); programmerCafetiere(); programmerReveil() } Calendrier Cafetière receptionEveneemnt(){ verifierCalendrier(); veriierReveil(); } Arrosage receptionEveneemnt(){ verifierCalendrier(); verifierTemperature(); verifierPlui(); }

Mediator

  Centraliser le contrôle et les communications complexes entre objets Augmente la réutilisabilité des objets, en les découplant.

Mediator

Réveil Mediator Cafetière Calendrier Arrosage receptionEveneemnt(){ If(weekend){ verfierTemperature() } If (reveilEvenement){ verifierCalendrier(); veriierArrosage(); demarrerCafetiere(); } //suite }

Command

    Encapsule une requête comme un objet.

Un command regroupe :   Les actions Le récepteur L’objet command est une « Boite noire », le client ne sait pas ce qui se passe à l’intérieur.

Le client sait que sa requête sera satisfaite par le billet d’une méthode : execute()

Command

 Un commande:   Les actions:  Allumer, éteindre Le récepteur:  Lampe, climatiseur

Command

on off on off •2 récepteurs.

•4 commandes.

Command

public interface Commande { public void executer(); } public class CommandeAllumerLampe implements Commande { Lampe lampe; récepteur public CommandeAllumerLampe(Lampe lampe) { this.lampe = lampe; } } public void executer() { lampe.marche(); } action

Command

Autre commande : CommandeEteindreLampe Télécommande : référence les différentes commandes

Etat

  Permet à un objet de modifier son comportement quand son état interne change. Tout se passera comme si l’objet changerait de classe En encapsulant chaque état dans une classe, nous isolons tous les changement qui seront nécessaires.

Etat

 Exemple : Montre électronique

Observer

 Définit une relation entre objet de type un à plusieurs, de façon que, quand un objet change d’état, tous ceux qui en dépendent en soient notifiés et soit mis à jours automatiquement.

 Principe : Diffusion + Souscription

Observer

 2 familles d’objet:  Les observateurs  L’observable : celui qu’on observe  Liste de diffusion  Observateur : les email  Observable : publication d’un nouveau message

Template

 Définit le squelette d’un algorithme et permet aux sous-classes de fournir l’implémentation d’une ou plusieurs étapes.

Template

  On peut trouver plusieurs type de gréve : ratp, sncf, etc… Par contre elle suivent toutes la même logique

Template

 Préparation d’un grève  L’algorithme général negociation() If(!negociation){ ecrireRevendication(); publierRevendication(); arreterTravail(); } reprendreTravail();

Template

  La classe Grève implementera la logique Les classes filles implémenterons les actions.