Je suis en train d'apprendre les modèles de conception Java GoF et je veux voir des exemples concrets de ces modèles. Quels sont les bons exemples de ces Design Patterns dans les bibliothèques de base de Java ?
Réponses
Trop de publicités?Même si je suis en quelque sorte une horloge brisée avec celle-ci, l'API Java XML utilise beaucoup Factory. Je veux dire, regardez ça :
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...et ainsi de suite.
En outre, divers tampons (StringBuffer, ByteBuffer, StringBuilder) utilisent Builder.
java.util.Collection#Iterator est un bon exemple de méthode d'usine. Selon la sous-classe concrète de Collection que vous utilisez, elle créera une implémentation d'Iterator. Comme la superclasse Factory (Collection) et l'Iterator créé sont tous deux des interfaces, on la confond parfois avec AbstractFactory. La plupart des exemples d'AbstractFactory dans la réponse acceptée (BalusC) sont des exemples de Usine La méthode Factory est une version simplifiée de la méthode Factory, qui ne fait pas partie des modèles originaux du GoF. Dans Facory, la hiérarchie des classes Factory est réduite et la fabrique utilise d'autres moyens pour choisir le produit à renvoyer.
- Usine abstraite
Une fabrique abstraite possède plusieurs méthodes de fabrication, chacune créant un produit différent. Les produits fabriqués par une usine sont destinés à être utilisés ensemble (votre imprimante et vos cartouches ont intérêt à provenir de la même usine (abstraite)). Comme mentionné dans les réponses ci-dessus, les familles de composants GUI AWT, qui diffèrent d'une plate-forme à l'autre, en sont un exemple (bien que leur mise en œuvre diffère de la structure décrite dans Gof).
Je veux partager avec vous deux liens intéressants, que j'ai trouvés en cherchant une bonne description et (comme kunjan kshetri) quelques exemples concrets de Modèle de prototype
Quoi qu'il en soit, j'ai lu des tonnes de pages web décrivant ce modèle (parce que j'avais du mal à en trouver l'usage) et ces deux-là étaient les plus utiles et les plus dignes d'être mentionnés.
http://ehsanbraindump.blogspot.com/2007/05/prototype.html
http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html
Swing utilise également le Motif composite
Essai de Zed Shaw L'orientation n'est pas l'abstraction donne un exemple tiré de Sun Java CustomerBean.java
Regardez le code pour
CustomerBean.java
et plus particulièrement leaddSubscription
méthode. Pour ajouter un abonnement à un client, vous devez procéder comme suit :
- Saisissez un contexte initial.
- Utilisez le contexte initial pour rechercher le
LocationSubscriptionHome
objet.- Utilisez le
LocationSubscriptionHome
pour trouver l'abonnement.- Ensuite, appelez
CustomerBean.addSubscription (LocalSubscription subscription)
pour ajouter l'abonnement. Oh, mais nous n'avons pas encore fini.- Utilisez ensuite le
CustomerBean.getSubscriptions ()
pour obtenir la Collection d'abonnements. D'où vient cette méthode ? Elle est définie comme abstraite, tout comme la classe. Comment cette méthode est-elle créée ? Si vous lisez le document, vous verrez qu'il s'agit en fait d'une relation gérée par conteneur (CMR), ce qui signifie qu'elle est probablement définie dans un fichier XML quelque part.- Enfin, après toute cette indirection, nous sommes en mesure d'appeler la fonction
Collection.add()
sur la collection sous-jacente, qui est également gérée par un conteneur et principalement définie en externe, ce qui constitue un niveau d'indirection supplémentaire.Pour résumer, juste pour arriver à ajouter un objet à la base de données de l'entreprise. nous avons dû suivre cette chaîne d'appels :
new InitialContext ()
~~>InitialContext.lookup
~~>CustomerBean.addSubscription ()
->CustomerBean.getSubscriptions ()
->Collection.add ()
. Un incroyable 6 niveaux d'indirection juste pour ajouter un objet à une collection.Je classe ce type d'interface comme "infesté d'indirections" et fixe stupéfait quand on me dit que c'est une interface abstraite parce que "vous pouvez changer l'implémentation de Subscription sans changer votre code".
- Réponses précédentes
- Plus de réponses