pptx - Eric Blaudez

publicité
Java – Design
Patterns
Eric Blaudez ([email protected])| 04
Les patrons de conceptions
•
Introduction
•
Modèles de création
•
Modèles de structure
•
Modèles de comportement
Java -Design Patterns
Description
2
Agenda
• Modèles
de création
• Modèles
de structure
• Modèles
de comportement
Java -Design Patterns
• Introduction
3
Introduction
Formalisés dans le livre du « Gang of Four » (GoF, Erich Gamma, Richard Helm, Ralph
Johnson (en) et John Vlissides (en)) intitulé Design Patterns - Elements of Reusable
Object-Oriented Software9 en 1995. Les patrons de conception tirent leur origine des
travaux de l'architecte Christopher Alexander dans les années 70, dont son livre A
Pattern Language définit un ensemble de patrons d'architecture.
(Wikipedia : Patrons de conception)
Java -Design Patterns
Les patrons de conceptions (Design Patterns) proposent des modélisations de problèmes
connus.
4
Introduction
Il existe 3 types de patrons de conceptions:
Java -Design Patterns
• Construction : instanciation & configuration des objets
• Structure : organisation des classes
• Comportement : collaboration entre les objets
5
Modèles de création
Modèles de structure
Modèle de comportement
Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Proxy
Chain of responsability
Command
Interpreter
Iterator
Mediator
Memento
Flyweight
Observer
State
Strategy
Template method
Visitor
Java -Design Patterns
Introduction
6
Agenda
• Introduction
de création
• Modèles
de structure
• Modèles
de comportement
Java -Design Patterns
• Modèles
7
Modèles de création
Le patron de conception Singleton assure qu'un
seul objet sera créé. Il n'y pas d'instanciation
directe, pour accéder à l'objet il faut utiliser une
méthode statique.
Java -Design Patterns
Singleton
8
Modèles de création
Singleton
Java -Design Patterns
Dans l'exemple proposé, l'objet Session n'aura
qu'une seule instanciation durant toute la vie du
programme. Cela assure que chaque objet
ayant accès à l'objet Session disposera des
mêmes informations.
9
Modèles de création
Singleton
private Session () {
name = null;
id = java.util.UUID.randomUUID().toString();
}
public static Session instance() {
if (self == null) {
self = new Session();
}
return self;
}
public String programPath() { return System.getProperty("user.dir"); }
public String sessionId() { return id; }
public void setAppName(String name) { self.name = name; }
public String getAppName() { return self.name; }
}
Java -Design Patterns
public class Session {
static private Session self = null;
private String name;
private String id;
10
Modèles de création
Le patron de conception Factory cache à
l'utilisateur toute la mécanique de création
d'un objet. Une Factory fournie une
instanciation des objets ayant une
interface pour laquelle elle a été conçue.
Java -Design Patterns
Factory
11
Modèles de création
Factory
Java -Design Patterns
L'exemple propose la création d'un objet
Music ou Video en utilisant une Factory.
Ainsi la méthode getMedia retourne une
instanciation de l'un de ces objets en
fonction d'une chaîne de caractères
12
Modèles de création
Factory
public interface Media {
public void play();
}
public class Music implements Media {
public Music () { };
public void play() { System.err.println("Play music"); }
}
public class MediaFactory {
public MediaFactory () { };
public Media getMedia(String mediaType) {
if (mediaType.equals("video")) { return new Video(); }
else if (mediaType.equals("music")) { return new Music(); }
return null;
}
}
Java -Design Patterns
public class Video implements Media {
public Video () { };
public void play() { System.err.println("Play video"); }
}
13
Agenda
• Modèles
de création
• Modèle
de structure
• Modèles
de comportement
Java -Design Patterns
• Introduction
14
Modèles de création
Proxy
L'exemple proposé, montre la création d'un Proxy de
l'objet Music. L'objet Music est créé lors du premier
appel de la méthode interfacée play.
Java -Design Patterns
La patron de conception Proxy permet
l'instanciation d'un objet au moment de son
utilisation.
15
Modèles de création
Proxy
public class Music implements Media {
public void play() {
System.err.println("Play Music");
}
}
public class MusicProxy implements Media {
protected Media media;
public MusicProxy () { media = null; };
public void play() {
if (media == null) {
media = new Music();
}
media.play();
}
}
Java -Design Patterns
public interface Media {
public void play();
}
16
Modèles de création
Decorator
Java -Design Patterns
La patron de conception Decorator permet l'ajout de
fonctionnalités sur un objet existant.
17
Modèles de création
Decorator
Java -Design Patterns
Dans le Decorator proposé, l'objet TunedMedia ajoute
une information de volume aux objets dérivant la
d'interface Media
18
Modèles de création
Decorator
public class Music implements Media {
public void play() {
System.err.println("Play Music");
}
}
public abstract class MediaDecorator implements Media {
protected Media media;
public MediaDecorator(Media media) { this.media = media; }
@Override
abstract public void play();
}
public class TunedMedia extends MediaDecorator {
private int volume;
public void setVolume (int volume) {
this.volume = volume; }
public TunedMedia(Media media) {
super(media); volume=5;
}
public void play() {
System.err.print("[Volume:"+volume+"] ");
media.play();
}
}
Java -Design Patterns
public interface Media {
public void play();
}
19
Agenda
• Modèles
de création
• Modèles
de structure
• Modèle
de comportement
Java -Design Patterns
• Introduction
20
Modèles de comportement
Observer
Java -Design Patterns
La patron de conception Observer permet
la notification d'un état à plusieurs objets
(les Observers).
21
Modèles de comportement
Observer
Java -Design Patterns
Dans l'exemple proposé l'objet MediaPlayList
informe les Observers, MusicPlayer et
VideoPlayer d'un changement de volume.
22
Modèles de comportement
public class MediaPlayList {
private ArrayList<MediaObserver> observers;
private int volume;
public MediaPlayList () {
this.observers = new ArrayList<MediaObserver>();
};
public void setVolume (int volume) {
this.volume = volume;
notifyAllObservers();
}
public int getVolume () { return volume; }
public void addObserver(MediaObserver observer) {
observers.add(observer);
}
public void notifyAllObservers() {
for (MediaObserver observer : observers) {
observer.update();
}
}
}
public class MusicPlayer extends MediaObserver {
public MusicPlayer (MediaPlayList mediaPlayList) {
super(mediaPlayList); }
@Override
public void update() {
System.err.println("Music Player Volume updated to ["
+super.mediaPlayList.getVolume()+"]");
}
}
public abstract class MediaObserver {
protected MediaPlayList mediaPlayList;
public MediaObserver (MediaPlayList mediaPlayList) {
this.mediaPlayList = mediaPlayList;
this.mediaPlayList.addObserver(this);
}
abstract public void update(); }
}
public class VideoPlayer extends MediaObserver {
public VideoPlayer (MediaPlayList mediaPlayList) {
super(mediaPlayList); }
@Override
public void update() {
System.err.println("Video Player Volume updated to ["
+super.mediaPlayList.getVolume()+"]");
}
}
Java -Design Patterns
Observer
23
Modèles de comportement
State
Le patron de conception State permet la modification de
comportement d'un objet (le contexte) sans en modifier
l'instance.
Java -Design Patterns
L'exemple propose de conserver dans un contexte l'état
d'un Player : stoppé ou en cours.
24
Modèles de comportement
State
public class Context {
private PlayerState state;
public Context () { }
public void setState(PlayerState state) {
this.state = state;
}
public PlayerState getState() {
return state;
}
}
public class StopState extends PlayerState {
public StopState () { }
public void doAction(Context context) {
context.setState(this);
System.err.println("Stop action");
}
public String name() {
return "stop";
}
}
Java -Design Patterns
public abstract class PlayerState {
abstract public void doAction(Context context);
abstract public String name();
}
public class PlayState extends PlayerState {
public PlayState () { }
public void doAction(Context context) {
context.setState(this);
System.err.println("Play action");
}
public String name() {
return "play";
}
}
25
Téléchargement