Vous êtes sur la page 1sur 31

Abonnez-vous à DeepL Pro pour traduire des fichiers plus volumineux.

Visitez www.DeepL.com/propour en savoir plus.

Motifs de création
Master en informatique/Master en ingénierie
Vue
d'ensem
• Singleton
ble • S'assurer qu'une classe n'a qu'une seule instance.
• Fournir un point d'accès global à celui-ci
• L'usine abstraite :
• Fournir une interface pour créer des familles d'objets connexes ou
dépendants sans spécifier leurs classes concrètes.
• Méthode d'usine :
• Définir une interface pour créer un objet, mais laisser les sous-classes décider
de la classe à instancier.
• Permet à une classe de différer son instanciation aux sous-classes.
• Prototype
• Spécifier les types d'objets à créer en utilisant une instance prototypique
• Créer de nouveaux objets en copiant ce prototype
• Constructeur :
• Séparer la construction d'un objet complexe de sa représentation afin que
le même processus de construction peut créer des représentations différentes
Usine : utiliser
"nouveau"
Le canard est un • Utiliser new pour
Interface/Abstrait
instancier une classe
concrète
Cana RubberDuck • Le code est plus fragile
rd et moins flexible

Canard DecoyDuck
colvert
Créer un ensemble de
classes

• La maintenance et les mises à jour sont plus difficiles et sujettes à des erreurs.
• Modification ou extension : nécessité de rouvrir le code
• Nouveau n'est pas mauvais puisqu'il s'agit d'un
élément fondamental de JAVA.
• Le problème est le CHANGEMENT et son impact sur l'utilisation des nouvelles
technologies.
• Rappelez-vous les principes de conception OO :
Créer un ensemble de
classes
• Identifier les aspects qui varient et les séparer de ce qui reste identique.
• La conception doit être ouverte à l'extension mais fermée à la modification.
Identifier les aspects qui
varient

Que pouvons-nous faire si nous avons besoin de plus d'un


type de PIZZA ?
Pi zza orderPizza(S . ring ty e) {
Pizza pizza ;

if ( .ype.equa l s (''cheese,,,) ){
pi zza = new CheeseP izza() ;
}else if ( t y p e . equals ( '' g r e e kr ' ) {
pizza e nouveau GreekPizza O ;
} sinon (type .equals("'
p epperoni11
si ) {

pi' zza = nouvelle PepperoniPizza()


} ;

pizza. p repare()
;
- Quand on a une Pizza, on la rrcpa "e.
pi z za . ba ke () ;
! Je sais, olI edo1 .1,h, f1.&t 0t1 la
pizza. cut()
sa e ihd add .f:hc torv-" f theest :),
; pizza. box -Hu!!n nous ba t. it, ti.,.t it ihO bo'1l 1t
O ; return
E.ath Piz.z. a s1.LbtYft (CbeesePi-z :.z :. a,
pizza ;
V e9, -1ePizz.a, !!tl--) sait '1ow to vw-era
}
e ihd.f.
Ajouter d'autres
types de pizza
Encapsuler la création
d'objets
Pizza orderPizza(String type)
{
Pizza pizza ;
Qu'est-ce Retirer le
qui se code de
passe création
ici ? d'objet

pizza.prepare() Placez ce code


; pizza.bake() dans un
; objet
pizza.cut() ;
pizza.box() ;
Retourner la
pizza ;
}
Encapsuler la création
SimplePizzaFactory
d'objets
Classe de
pizzeria
Usine simple
Rendre l'usine plus abstraite
• Exposé du problème
• Créer plusieurs pizzerias différentes
• Les magasins proposent différents styles de pizza
• Chaque style provient d'une usine spécifique
• Exercice :
• Proposer une solution basée sur la classe SimpleFactory
• Une autre idée
• Localisez toutes les activités de fabrication de pizzas dans le
PizzaStore.
• Donner aux franchises la liberté de créer leur propre style.
Méthode
d'usine
Modèle de méthode
d'usine
Le Factory Method Pattern définit une
interface pour créer un objet, mais
laisse les sous-classes décider de la
classe à instancier.
Classes de
créateurs
Classes de
produits
Modèle de fabrique
abstraite
NY s.-1Qfll
Tl.,e ,1-e,,-b ; ,,.r ti,, : -6-a,,.t
J Foittm)' .l'l'"t B.1 : i-
fr,S,ti)r,C.c .J -P ke..
N'(P",:z=a&\"c et
Th( 'brt.-at::t. Pi=. al,, it:d1tniir t hn-y isw Cn,ta l)'lcf'i -6-(..
;;iu H.at d.ctint : to
no.lu ,a ta1n1ily iJ' l "t li w:I -1 ;.s
-k-- r- -
2
- ""IH"- we"°" t<>
<.r;m.rsrf
,Dl:lr/J gti

"A-P :
Elli lt k-c ru IDDL,i illlThirlCr !! $t Dnun 1w +
t8(
Ptl a ltlli'l's "H!ry
- ..,. =
Sil <.r;m.rsrf
) ii

Cillffllmo -sqP ;
Q-N.\I)
U'a.\'i'I'} -- Plu 'Tomak!Seu, ce lillariiwa.Sa!Xlii
-
V I -
-
- -
.'
-

N'l'P "dZ,.!ilHii !flt 3t b, I')' ctiit11goPi'ua!i'i9J1!di!i'ilFbt'!My < i{mfsrfa, ...,


;,;,"
ll'k31IOl:ioJtll l ffi&'.e!Joog"'(I
Clii!i!li!li !
Q "iio:!l!iS 1)10 $,IIIQ(il.)
m
IZ iO .
£Z
IJ'tlll E<3jj "8ID3'1EQ!l m(I -MCdieeee R i ! si('il fini:;Ohl!l ! i ! - ·

i;r I(I 01 ! Pon;ui [)


tr hlCl!iml ! tte il' !! Cl:':ui'(I
- -
< '{fnf

;
"Qrfa;;m
Cl&ms
"N '

:,
Le travail ,o l h . ,Qr,t:r tt -Frwg FmsnOlams
: yi:u.a t.illbw i est W
ii<dke fiUd in¥ali... b-
lht .lt kr,,:iw5
hO'H lo t.l "c.ltl ' tll "tyil
objetb +di" B-ilffi " io-ti
Comment
aires
• Les classes d'usine abstraites sont souvent
mises en œuvre avec le modèle Factory
Method.
• Dans l'exemple, chaque méthode ressemble à une
méthode d'usine (createDough(), createsauce(), ...).
Elles sont déclarées abstraites
• Peut également être mis en œuvre en utilisant le
Prototype
modèle. Qu'est-ce qu'un prototype ? Et
Singleton ?
• Une usine de béton est souvent un Singleton.
• Normalement, une seule instance de la classe
ConcreteFactory est créée au moment de l'exécution.
Modèle
singleton
• Intention
• Assurez-vous qu'une classe n'a jamais qu'une seule instance,
et fournissez une fonction
point d'accès global à celui-ci.
• Applicabilité
• Lorsqu'il doit y avoir exactement une instance d'une
classe, et qu'elle doit être accessible à partir d'un point
d'accès connu.
• Lorsque l'instance unique doit être extensible
par sous-classification, et que les clients doivent
pouvoir utiliser une instance étendue sans
modifier leur code.
Singleton (suite)

Mise en œuvre de la structureClassic


public class Singleton {
statique privée Sigleton uniqueInstance ;
//autres attributs ici
private Singleton() {}
public static Singleton
getInstance(){ If
(uniqueInstance == null) {
uniqueInstance = new Singleton() ;
}
retourner uniqueInstance ;
}
// d'autres méthodes utiles ici
}
Singleton (suite)
• Conséquences
Réduction de la pollution des espaces de noms
Il est facile de changer d'avis et d'autoriser plus d'une
instance.
Permettre l'extension par sous-classification
• Les mêmes inconvénients qu'un global s'il est mal utilisé
• La mise en œuvre peut être moins efficace qu'une
• Les pièges de la concussion
• Mise en œuvre
• Opération d'instance statique
• Enregistrement de l'instance singleton
Questions
• Un modèle pour instancier UN SEUL objet ?
• A quoi ça sert ?
• Pool de threads, Caches, Boîte de dialogue, pilotes de
périphériques, objets de journalisation
• Pourquoi ne le faisons-nous pas avec des
variables globales (statiques en JAVA) ?
• Quels sont les inconvénients (désavantages) des variables
globales ?
• L'objet est créé au début de l'application (même si
l'application n'en a pas besoin).
• Consommation des ressources
• Le singleton est instancié en cas de besoin.
Autres motifs de
création
• Constructeur :
• Séparer la construction d'un objet complexe de sa
représentation afin que le même processus de
construction puisse créer des représentations
différentes.
• Prototype
• Spécifier les types d'objets à créer à l'aide d'une
exemple prototypique
• Créer de nouveaux objets en copiant ce prototype
Constr
ucteur
• Intention
• Séparer la construction d'un objet complexe de sa
représentation afin que le même processus de construction
puisse créer des représentations différentes.
• Applicabilité
• Nécessité d'isoler la connaissance de la création d'un objet
complexe de ses parties
• Nécessité de permettre différentes implémentations/interfaces de
l'interface d'un objet
pièces
• structure
Prototype
• Intention
• Spécifier les types d'objets à créer en utilisant une instance
prototypique et créer de nouveaux objets en copiant ce prototype.
• Applicabilité
• quand un système doit être indépendant de la façon dont ses produits
sont créés, composés et représentés.
• lorsque les classes à instancier sont spécifiées au moment de l'exécution.
• Structure
Prototype (suite)
• Conséquences
• peut ajouter et supprimer des classes à l'exécution en les clonant en
tant que
nécessaire
• La sous-classification réduite minimise/élimine le besoin
de dépendances lexicales au moment de l'exécution.
• chaque classe utilisée comme prototype doit elle-
même être instanciée.
• les classes qui ont des références circulaires à d'autres classes ne
peuvent pas
être réellement cloné
• Mise en œuvre
• Utiliser le gestionnaire de prototypes
• Copies superficielles ou profondes
• Initialisation de l'état interne du clone dans une interface uniforme
Exercice
s
• Trouvez d'autres exemples proches de votre travail
quotidien
Demande de la
banque
• Dans SmartVille, il y a une banque où le citoyen
peut ouvrir un compte.
• Mais la banque propose plus d'un type de
compte (épargne, chèque, islamique, ...).
• Changements
• Sous la pression de ses concurrents, la banque
améliore ses offres en ajoutant de nouveaux
types de comptes.
• La banque ouvre des succursales dans différentes régions.
• Proposer un modèle de conception de cette
application sous ces contraintes de changement.

Vous aimerez peut-être aussi