Qu'est ce qu'un patron de conception ?
C'est une solution générique, personnalisable et réutilisable pour des problèmes que l'on rencontre dans la conception logiciel.
Quels sont les types de patron de conception ?
Ils sont classifiés selon 3 types principaux :
Créateurs
Ils fournissent des mécanismes de création d'objet augmentant la flexibilité, maintenabilité et réutilisabilité du code.
Structuraux
Ils permettent d'assembler les objets et de structurer les classes en utilisant le concept d'héritage.
Comportementaux
Ils permettent la mise en place d'algorithme pour le traitement des objets.
Qu'apportent les patrons de conception ?
Des solutions prouvées et testées pour de nombreux problèmes de programmation orientée objet
Un langage commun pour discuter des solutions à mettre en place
Il est approprié de les utiliser pour :
- Optimiser des parties du code actuel
- Résoudre un problème pour lequel un patron de conception existe
Il n'est pas approprié de les utiliser pour :
- Placer un patron de conception juste pour en placer un
- Modifier la structure du code pour coller exactement à un patron de conception
Patron de conception Créateur
Singleton
Avoir une seule instance de l'objet toujours appelée
public class MySingleton {
private static MySingleton instance;
private MySingleton(){}
public final static MySingleton getInstance(){
if (instance == null){
return new MySingleton();
}
return instance;
}
}
Factory
Exposer une interface unique pour créer des objets de la même famille
public interface Animal {
void sound();
}
public class Dog implements Animal {
@Override
public void sound(){
System.out.println("bark");
}
}
public class Cat implements Animal {
@Override
public void sound(){
System.out.println("meow");
}
}
public class AnimalFactory{
Animal getAnimal(String animal){
return animal.equalsIgnoreCase("DOG")?
new Dog(): new Cat();
}
}
public class DemoFactory {
AnimalFactory factory = new AnimalFactory();
public static void main(String[] args) {
Animal animal = factory.getAnimal("DOG");
Animal animal2 = factory.getAnimal("CAT");
animal.sound(); // bark
animal2.sound(); // meow
}
}