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.

Designs Patterns en Java

453 views

Published on

Description de quelques principaux design patterns, et implémentatin en langage Java

Published in: Technology
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full EPUB Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full doc Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... Download PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download EPUB Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... Download doc Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Designs Patterns en Java

  1. 1. Designs patterns Modèles de conceptions pour le développement objet jd@olek.fr Version du 12/12/2016
  2. 2. Qu’est ce qu’un design pattern • Ca n’est pas une bibliothèque ou un outil ou une classe, ni même une technique particulière • C’est un “modèle de conception” • Adapté aux problèmes les plus courants du développeur objet • Ecrit et validé par les plus grands experts
  3. 3. A quoi servent les designs patterns ? • A partir d’un modèle • Pour ne pas se sentir perdu • Pour valider les choix effectués • Pour ne pas réinventer la roue • A nommer les choses • Pour parler le même langage • Pour comprendre plus facilement un programme inconnu qui utilise ce vocabulaire commun
  4. 4. Un modèle ? • Vous voulez faire une tarte aux pommes • Soit vous improvisez une recette • Mais vous ne saurez pas à l’avance si elle sera OK. Parfois oui, d’autres fois... • Soit vous suivez la recette d’un grand chef • Moins de surprises, de stress • Pas besoin de réfléchir et de réinventer tout • Pas de surprise pour les convives
  5. 5. Nommer son modèle • Préférez vous dire ? • “Je fais un plat avec des plaques de pâte rectangulaires, de la viande hachée et de la béchamel” • “Je fais des lasagnes” • Plus facile pour communiquer entre vous • “Chérie ce soir je fais des lasagnes” • Plus facile à assimiler lorsque vous êtes face à une situation inconnue • Au rayon surgelés, on prend le paquet “Lasagnes”
  6. 6. Les différents patterns • Patterns de construction • Patterns de structure • Patterns de comportement
  7. 7. Les patterns de construction • Alternatives au classique “new UneClasse()” • Vont permettre de contrôler et d’orienter les instanciations de classes
  8. 8. Singleton • Cas général : • Soit on a une classe instanciable • On peut l’instancier autant de fois que l’on veut • Soit on a une méthode utilisée statiquement • N’existe qu’une fois • Mais peut être appelée X fois • Pas de garantie d’initialisation propre • Et pas d’encapsulation
  9. 9. Singleton (suite) • Un singleton est donc une classe • Instanciable... • ...mais instanciable une seule fois
  10. 10. Recette du cuisine du Singleton • Un attribut statique privé représentant une instance de sa propre classe • Rendre le(s) constructeur(s) private • Un getter public statique de l’instance, contrôlant son unicité
  11. 11. Exemple de singleton public class UneClasse
 {
 private static UneClasse singleton=null;
 private UneClasse() { ... }
 public static UneClasse getUneClasse()
 {
 if(singleton==null)
 singleton=new UneClasse();
 return singleton;
 }
 } appel : UneClasse instance=new UneClasse(); UneClasse instance=UneClasse.getUneClasse(); X X X
  12. 12. Analyse du singleton • Constructeur privé = on empêche de librement faire un new UneClasse() • Accesseur statique public : accessible depuis n’importe où • L’accesseur est donc l’unique point d’entrée pour la classe, il peut faire un contrôle d’unicité
  13. 13. Factory • Problématique : suivant certains paramètres, on veut instancier une classe ou une autre • Cadre : hiérarchie de classes (par héritage) • Exemple : chargement d’un produit depuis une base à partir d’une référence • On ne sait pas à l’avance s’il s’agit d’un livre, d’un DVD...
  14. 14. Ecrire une factory • Dans les faits, une factory n’est qu’une méthode (statique) prenant des paramètres d’entrée, et retournant un type de classe générique • On encapsulera en général cette méthode dans une classe spécifique public class ProduitFactory
 { public static Produit getProduit(int ref) { ... } }
  15. 15. Le pattern Builder • Objectif : s'assurer de la cohérence de la construction d'un objet • Méthode : déléguer cette construction à un Builder
  16. 16. Exemple de problème • Une classe MenuItem contient de nombreux attributs • Certains sont obligatoires : id, libelle • Certains sont facultatifs : icone • Certains sont liés à un contrôle métier : on doit avoir impérativement soit une URL soit un article, soit une liste MenuItem id libelle url article liste icone MenuItem(..)
  17. 17. Solution 1 : passer par des setters • Pas satisfaisant car on ne fait aucun contrôle ni métier, ni sur ce qui est obligatoire : on peut donc à tout moment avoir un objet incohérent en mémoire public class MenuItem
 {
 public void setURL() { ... }
 public void setId() { ... }
 }
  18. 18. Solution 2 : gérer des constructeurs • Inconvénient : on peut potentiellement multiplier les constructeurs et ça amène une certaine lourdeur public class MenuItem
 {
 public MenuItem(int id,String libelle,String url) { ... }
 public MenuItem(int id,String libelle,String url,String icone) { ... }
 public MenuItem(int id,String libelle,String article) { ... }
 }
  19. 19. Solution 2bis : mixer constructeurs et setters • Mieux, mais on ne fait que reporter le problème public class MenuItem
 {
 public MenuItem(int id,String libelle,String url) { ... }
 public MenuItem(int id,String libelle,String article) { ... }
 public void setIcone(String icone) { ... }
 }
  20. 20. Principe du pattern Builder • On crée une classe MenuItemBuilder à qui on délègue le process de création de l'objet MenuItem • L'objet n'est délivré qu'une fois toutes les étapes de remplissage et contrôles effectués
  21. 21. Exemple d'appel de builder MenuItemBuilder builder=
 MenuItemBuilder.get(libelle,id);
 builder.setArticle(article);
 builder.setIcone(icone);
 MenuItem item=builder.build(); Un premier getter permet de récupérer les attributs systématiques Une méthode build() permet de récupérer l'objet voulu une fois tous les contrôles effectués
  22. 22. Protection de la classe MenuItem public class MenuItem
 {
 private int id;
 public MenuItem
 (MenuItemBuilder builder)
 {
 this.id=builder.id;
 ...
 }
 } • Pour éviter que l'utilisateur ne remplisse 'sauvagement' MenuItem, on impose la construction par un builder Les contrôles métier se font ici
  23. 23. Bonus : la fluent interface • Cette astuce permet de grandement fluidifier l'appel à un Builder, et plus globalement peut être utilisé dans plein de cas • Sa mise en place consiste à modifier les méthodes pour qu'elles retournent toutes leur propre instance public void setURL(String url)
 {
 this.url=url;
 } public MenuItemBuilder setURL(String url)
 {
 this.url=url;
 return this;
 }
  24. 24. Utilisation de la fluent interface • L'appel peut désormais se faire sur une seule ligne • Il est désormais inutile de créer une variable "builder" MenuItemBuilder builder=
 MenuItemBuilder.get(id,libelle);
 builder.setURL(url);
 builder.setIcone(icone);
 MenuItem item=builder.build(); MenuItem item=
 MenuItemBuilder.get(id,libelle)
 .setUrl(url).setIcone(icone).build();
  25. 25. Les patterns de comportement • Vont permettre un usage adapté d’un comportement de l’application en fonction d’un contexte particulier
  26. 26. Strategy • Ce pattern permet de “fournir” un traitement adapté à certaines classes • Ce traitement sera en fait structuré de manière polymorphe • Très proche du schéma “calculeAire() de Forme” • Mais une forme encapsule ‘par nature’ sa méthode de calculeAire() • Alors qu’avec Strategy, la méthode vient de l’extérieur
  27. 27. Exemples d’utilisation de Strategy • On a un fichier, on veut pouvoir le sauvegarder en XML ou en binaire • On a une donnée, on veut pouvoir l’afficher en tant que barres ou de camembert
  28. 28. Définition des Strategy • On crée un objet Context qui gère les différentes stratégies possibles • Va encapsuler des instances de “Strategy”, classes encapsulant 
 les traitements • Encapsule également la méthode
 d’exécution de la stratégie • Le plus souvent, les Strategy
 seront structurées en
 héritage SaveFileContext setXMLStrategy() setBinaryStrategy() save(File)

×