672 votes

Exemples de modèles de conception GoF dans les bibliothèques de base de Java

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 ?

23voto

Esko Points 15578

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.

23voto

Catweazle Points 159

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).

13voto

dantuch Points 5048

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

11voto

Vincent Ramdhanie Points 46265

Swing utilise également le Motif composite

-1voto

Colonel Panic Points 18390

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 le addSubscription méthode. Pour ajouter un abonnement à un client, vous devez procéder comme suit :

  1. Saisissez un contexte initial.
  2. Utilisez le contexte initial pour rechercher le LocationSubscriptionHome objet.
  3. Utilisez le LocationSubscriptionHome pour trouver l'abonnement.
  4. Ensuite, appelez CustomerBean.addSubscription (LocalSubscription subscription) pour ajouter l'abonnement. Oh, mais nous n'avons pas encore fini.
  5. 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.
  6. 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".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X