Design Patterns

1,775 views
1,675 views

Published on

Découvrir les design patterns avec PHP

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,775
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
37
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Design Patterns

  1. 1. DESIGN PATTERNS Mehdi Mehni [email_address]
  2. 2. Qu'est-ce que les design patterns ? <ul><li>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. </li></ul><ul><li>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é. </li></ul>
  3. 3. Pourquoi les étudier  ? <ul><li>Catalogue de solutions. </li></ul><ul><li>Bénéficier du savoir-faire d'experts  dans des contextes éprouvés.  </li></ul><ul><li>Faciliter la conception.  </li></ul>
  4. 4. Pourquoi les utiliser ? <ul><li>Ne pas réinventer la roue. </li></ul><ul><li>Faciliter la communication entre  les développeurs. </li></ul><ul><li>Pour résoudre un problème </li></ul>
  5. 5. Les différents types <ul><li>GoF (Gang of Four) Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides </li></ul><ul><li>( SmallTalk Best Pratice Patterns ) </li></ul><ul><li>Patterns de création : (Factory, AbstractFactory, Builder, Prototype, Singleton) </li></ul><ul><li>Patterns de structure : ( Adaptator, Bridge, Composite, Decorator, Interface, Flyweight, Proxy) </li></ul><ul><li>Patterns comportementaux: (Interpretor, Template method, Chain of responsability, Command, Iterator, Mediator, Memento, Observator, State, Strategy, Visitor) </li></ul>
  6. 6. Singleton <ul><li>Problématique  : S'assurer qu'il existeune seule instance d'un objet donné  pour toute l'application. </li></ul><ul><li>Solution : Une méthode statique pour  </li></ul><ul><li>contrôler l'instanciation. Rendre ce  </li></ul><ul><li>processus d'instanciation l'unique solution </li></ul><ul><li>possible pour la classe en question. </li></ul>
  7. 7. Singleton <ul><li>class Singleton </li></ul><ul><li>{ </li></ul><ul><ul><li>private static $_instance = null; </li></ul></ul><ul><ul><li>public static function getInstance() </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><ul><li>if (is_null(self :: $_instance)) { </li></ul></ul></ul><ul><ul><ul><li>self :: $_instance = new Singleton (); </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>return self :: $_instance; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function __clone() </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>throw new Exception('vous ne pouvez cloner un objet singleton'); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  8. 8. Factory <ul><li>Problématique :  Obtenir facilement un objet prêt à l'emploi et qui  correspond à nos besoins. </li></ul><ul><li>Solution :  Une classe / Une méthode qui encapsule la logique de création des objets en question. </li></ul>
  9. 9. Factory <ul><li>class Factory </li></ul><ul><li>{ </li></ul><ul><ul><li>public static function getDb($type) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><ul><li>if (include_once 'Drivers/' . $type . '.php') { </li></ul></ul></ul><ul><ul><ul><ul><li>$classname = $type; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>return new $classname; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>throw new Exception ('Driver non trouvé'); </li></ul></ul></ul></ul><ul><ul><ul><li>} else { </li></ul></ul></ul><ul><ul><ul><ul><li>throw new Exception ('Driver non trouvé'); </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  10. 10. Proxy <ul><li>Problématique :  Exécuter des opérations, avant ou après l’appel d’une méthode d’un objet </li></ul><ul><li>Solution :  Encapsuler votre objet dans un autre objet qui réalisera ces opérations </li></ul>
  11. 11. Proxy <ul><li>class MyClass{           </li></ul><ul><li>public function run()           {              echo ” Traitement ”;          }   </li></ul><ul><li>} </li></ul><ul><li>class ProxyMyClass { </li></ul><ul><li>  private $_ myClass  = null;          </li></ul><ul><li>  public function __construct()          {              $this->_myClass = new MyClass();          }  public function run()          {             echo”Avant”;              $this->_ myClass >run();            echo”Apres”;  </li></ul><ul><li>        }  </li></ul><ul><li>} </li></ul><ul><li>$obj = new  ProxyMyClass();  </li></ul><ul><li>$obj->run();  </li></ul>

×