Exemples de motifs de conception GoF dans les bibliothèques principales de Java



Answers

  1. Motif d'observateur pendant tout le swing ( Observable , Observer )
  2. MVC aussi en balançoire
  3. Modèle d'adaptateur: InputStreamReader et OutputStreamWriter REMARQUE: ContainerAdapter , ComponentAdapter , FocusAdapter , KeyAdapter et MouseAdapter ne sont pas des adaptateurs; ils sont en fait des objets nuls. Mauvais choix de nom par Sun.
  4. Modèle de décorateur ( BufferedInputStream peut décorer d'autres flux tels que FilterInputStream )
  5. AbstractFactory Pattern pour AWT Toolkit et les classes de présentation et d'analyse Swing connectables
  6. java.lang.Runtime#getRuntime() est Singleton
  7. ButtonGroup pour le modèle Mediator
  8. Action , AbstractAction peut être utilisé pour différentes représentations visuelles pour exécuter le même code -> Motif de commande
  9. Internes Strings ou CellRender dans JTable pour Flyweight Pattern (Pensez aussi aux différents pools - Pools de threads, pools de connexions, pools d'objets EJB - Flyweight concerne vraiment la gestion des ressources partagées)
  10. Le modèle d'événement Java 1.0 est un exemple de chaîne de responsabilité, tout comme les filtres de servlet.
  11. Modèle d'itérateur dans le cadre des collections
  12. Les conteneurs imbriqués dans AWT / Swing utilisent le modèle Composite
  13. Les gestionnaires de mise en page dans AWT / Swing sont un exemple de stratégie

et beaucoup plus je suppose

Question

J'apprends les modèles de conception de Java de GoF et je veux voir quelques exemples concrets de eux. Quels sont quelques bons exemples de ces modèles de conception dans les bibliothèques de base de Java?




Même si je suis en quelque sorte une horloge brisée avec celle-ci, Java XML API utilise beaucoup Factory. Je veux dire juste regarder ceci:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);

...et ainsi de suite.

De plus, divers tampons (StringBuffer, ByteBuffer, StringBuilder) utilisent Builder.




RMI est basé sur le proxy.

Devrait être possible d'en citer un pour la plupart des 23 modèles de GoF:

  1. Usine abstraite: les interfaces java.sql obtiennent toutes leurs implémentations concrètes à partir du fichier JDBC JAR lorsque le pilote est enregistré.
  2. Constructeur: java.lang.StringBuilder.
  3. Méthode d'usine: les usines XML, entre autres.
  4. Prototype: Peut-être que clone (), mais je ne suis pas sûr d'acheter ça.
  5. Singleton: java.lang.System
  6. Adaptateur: Classes d'adaptateur dans java.awt.event, par exemple, WindowAdapter.
  7. Bridge: classes de collection dans java.util. Liste implémentée par ArrayList.
  8. Composé: java.awt. java.awt.Component + java.awt.Container
  9. Décorateur: Partout dans le paquet java.io.
  10. Façade: ExternalContext se comporte comme une façade pour l'exécution de cookie, de portée de session et d'opérations similaires.
  11. Poids volé: Entier, Caractère, etc.
  12. Proxy: package java.rmi
  13. Chaîne de responsabilité: filtres de servlet
  14. Commande: éléments de menu Swing
  15. Interprète: Non directement dans JDK, mais JavaCC l'utilise certainement.
  16. Iterator: interface java.util.Iterator; ne peut pas être plus clair que cela.
  17. Médiateur: JMS?
  18. Mémento:
  19. Observateur: java.util.Observer/Observable (mal fait, cependant)
  20. Etat:
  21. Stratégie:
  22. Modèle:
  23. Visiteur:

Je ne peux pas penser à des exemples en Java pour 10 sur 23, mais je verrai si je peux faire mieux demain. C'est ce que l'édition est pour.




Links