Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Design Patterns

Découvrir les design patterns avec PHP

  • Login to see the comments

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>

×