7 votes

Bibliothèque de classes pour les modèles de conception en Java ?

Je me retrouve à réécrire sans cesse les mêmes schémas de programmation dans de nombreux nouveaux projets. J'ai pensé à créer ma propre bibliothèque réutilisable d'implémentations typiques de ces patrons - sans essayer de couvrir tous les patrons de conception possibles, mais seulement ceux dont l'expérience a montré qu'il est logique de les mettre en œuvre. typique Mais avant cela, j'aimerais savoir s'il n'existe pas déjà une bibliothèque à cet effet disponible pour Java ?

Je sais qu'il est très difficile de généraliser complètement les patrons de programmation de manière à ce qu'ils puissent être réutilisés dans différentes implémentations avec des exigences complexes (par exemple, composition de patrons, classes participant à plus d'un patron, etc ...). Cependant, la plupart du temps, les instanciations de patterns dont j'ai besoin sont assez simples et standard, et dans de nombreuses situations, le travail d'implémentation pourrait être un peu accéléré par l'utilisation d'une telle bibliothèque.

Merci pour vos commentaires !

4voto

Emmanuel Bourg Points 4555

Les modèles de conception sont juste... des modèles. Ce ne sont pas des classes prêtes à être utilisées par n'importe qui, mais des concepts communs que l'on retrouve dans plusieurs projets. C'est pourquoi vous ne trouverez pas d'API pour les patrons de conception.

3voto

Giovanni Azua Points 2183

C'est précisément la raison pour laquelle j'ai créé PerfectJPattern . Assurez-vous de vérifier et de comprendre les exemples de code. Ils sont disponibles en téléchargement ainsi que dans les pages de documentation du site pour chacune des implémentations du Pattern. Si vous avez lu le livre GoF, vous comprendrez plus facilement les exemples.

Par exemple, si vous voulez utiliser le motif composite dans votre code, et si vous utilisez PerfectJPattern il vous suffit de spécifier l'interface (paramètre générique et instance de classe) que vous souhaitez utiliser en tant que Composite et le reste vous est fourni, cf. Composite PerfectJPattern . Au bas de cette page, un exemple concret est fourni pour montrer comment y parvenir.

Un autre aspect que vous devez également prendre en compte est qu'en PerfectJPattern vous n'avez pas nécessairement besoin de réutiliser les implémentations génériques du Pattern (par exemple, le sous-module Maven perfectjpattern-core), vous avez également le choix de ne réutiliser que le niveau abstrait pur (le sous-module Maven perfectjpattern-api) et de fournir l'implémentation vous-même. Dans PerfectJPattern vous bénéficiez de la flexibilité de la réutilisation à différents niveaux d'abstraction, car il existe une conception en couches à grain fin qui se reflète également dans la structure du projet Maven. La réutilisation de l'interface perfectjpattern-api vous donne une ligne directrice abstraite pour les modèles, si vous le souhaitez, qui vous aidera à accélérer vos propres implémentations de modèles de conception. Cependant, l'idéal est de réutiliser autant que possible.

Mise à jour : suite à un commentaire ci-dessous, il est utile de noter que tous les Patterns ne peuvent pas être entièrement compotentialisés voir Des modèles aux composants . Certains Patterns ne peuvent être que partiellement componentialisés et d'autres pas du tout comme le cas du Singleton. Le Singleton dépend trop du contexte et c'est pourquoi vous ne pouvez trouver une interface que dans PerfectJPattern . Cependant, en PerfectJPattern les Patterns suivants sont entièrement composés, par exemple Observer, Command, Adapter, Decorator, Composite, Proxy, Visitor, DAO, etc.

1voto

Steven Jeuris Points 4850

Je ne suis pas d'accord avec les autres réponses selon lesquelles aucune implémentation réutilisable ne peut être créée pour les design patterns. Cependant, ce n'est pas toujours simple, et cela implique beaucoup de programmation abstraite.

Venant du C#, la simplicité du modèle de l'observateur en Java me manquait. (événements en C#) Après avoir terminé un observateur générique réutilisable pour Java, je suis tombé sur le PerfectJPattern bibliothèque.

Cela pourrait valoir la peine de vérifier.

Un modèle à composantes est essentiellement un indépendant du contexte , réutilisable y Sûreté de fonctionnement une variation du motif original qui couvre au moins au moins autant de cas d'utilisation que le modèle original et qui n'oblige pas les les développeurs à réimplémenter le même code passe-partout dans chaque contexte différent. Les patrons de conception sont réutilisables en termes de conception, les patrons à composants sont réutilisables en termes de conception et code .

Félicitations pour avoir voulu réduire toute forme de duplication possible. "Ne vous répétez pas" est l'un des principes les plus importants de la programmation.


Comme arguments supplémentaires, les modèles de conception peut être centralisée dans une bibliothèque ; je vous donne quelques exemples supplémentaires :

1voto

simpatico Points 2730

Ce que vous cherchez, c'est PerfectJPattern .

Checkout dp4j . Il vous permet d'implémenter le modèle Singleton avec @Singleton et l'initialiser paresseusement avec @Singleton(lazy=true) . Il s'agit d'une "collection de patrons de conception réutilisables, basés sur des composants et mis en œuvre en Java".

Pour la recommandation Singleton dp4j . Pour implémenter un Singleton, vous annotez votre classe avec @Singleton et pour l'initialiser paresseusement, vous annotez avec @Singleton(lazy=true) .

0voto

Don Roby Points 24965

Si vous vous retrouvez à répéter un code similaire dans plusieurs projets, il peut être judicieux d'extraire les parties qui se répètent dans une bibliothèque de code réutilisable dans l'espoir d'éviter de vous répéter à l'avenir.

Il est peu probable que cela conduise à des mises en œuvre réutilisables entièrement générales des patrons de conception.

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