Click here to load reader
Upload
mehdi-mehni
View
1.550
Download
2
Embed Size (px)
DESCRIPTION
Découvrir les design patterns avec PHP
Citation preview
DESIGN PATTERNS
Mehdi [email protected]
Qu'est-ce que les design patterns ?
Les designs patterns existent depuis bien plus longtemps que les systèmes d'informations. Ils ont été notamment utilisés dans le batiment depuis les années 70.
Un design pattern, traduit en français par motif de conception ou patron de conception est un terme de génie logiciel qui désigne une solution standard d'architecture logicielle correspondant à un problème donné.
Pourquoi les étudier ?
Catalogue de solutions. Bénéficier du savoir-faire d'experts
dans des contextes éprouvés. Faciliter la conception.
Pourquoi les utiliser ?
Ne pas réinventer la roue. Faciliter la communication entre
les développeurs. Pour résoudre un problème
Les différents types
GoF (Gang of Four)Erich Gamma, Richard Helm, Ralph
Johnson et John Vlissides (SmallTalk Best Pratice Patterns )
Patterns de création : (Factory, AbstractFactory, Builder, Prototype, Singleton)
Patterns de structure :( Adaptator, Bridge, Composite, Decorator, Interface, Flyweight, Proxy)
Patterns comportementaux: (Interpretor, Template method, Chain of responsability, Command, Iterator, Mediator, Memento, Observator, State, Strategy, Visitor)
Singleton
Problématique : S'assurer qu'il existeune seule instance d'un objet donné pour toute l'application.
Solution : Une méthode statique pour contrôler l'instanciation. Rendre ce processus d'instanciation l'unique solutionpossible pour la classe en question.
Singletonclass Singleton{
private static $_instance = null;public static function getInstance(){
if (is_null(self :: $_instance)) {self :: $_instance = new Singleton();
}return self :: $_instance;
}public function __clone(){
throw new Exception('vous ne pouvez cloner un objet singleton');
}}
Factory
Problématique : Obtenir facilementun objet prêt à l'emploi et qui correspond à nos besoins.
Solution : Une classe / Une méthodequi encapsule la logique de créationdes objets en question.
Factoryclass Factory{
public static function getDb($type){
if (include_once 'Drivers/' . $type . '.php') {$classname = $type;
return new $classname;
throw new Exception ('Driver non trouvé');} else {
throw new Exception ('Driver non trouvé');}
}}
Proxy
Problématique : Exécuter des opérations, avant ou après l’appel d’une méthode d’un objet
Solution : Encapsuler votre objet dans un autre objet qui réalisera ces opérations
Proxyclass MyClass{
public function run() { echo ”Traitement”; }
}
class ProxyMyClass {
private $_ myClass = null; public function __construct()
{ $this->_myClass = new MyClass(); } public function run() { echo”Avant”; $this->_ myClass >run(); echo”Apres”; }
}
$obj = new ProxyMyClass(); $obj->run();