J'essaie d'éduquer mes collègues dans le domaine des modèles de conception. Certains des motifs originaux de Gang of Four sont un peu ésotériques, donc je me demande s'il existe un sous-groupe de motifs "essentiels" que tous les programmeurs devraient connaître. En parcourant la liste, je pense que j'ai probablement utilisé -
- Usine abstraite
- Méthode d'usine
- Singleton
- Pont
- Façade
- Commander
Lesquels utilisez-vous réellement dans la pratique et à quoi les utilisez-vous?
design-patterns
Craig Schwarze
la source
la source
for, if, while...
etc" - difficile à mesurer à quel point cela serait inutile.Réponses:
Voici une liste de ceux que j'ai utilisés ou vus dans la pratique:
Singleton - L'objet Application dans ASP.Net en est un excellent exemple.
Adaptateur - La connexion à des bases de données peut généralement impliquer une classe d'adaptateur au moins dans mon domaine .Net.
Usine - Général pour générer des objets, bien que j'aie vu cela plus dans certains ASP classiques plus anciens à l'époque.
Stratégie - J'avais une application qui, pour chaque type d'appareil, avait une structure similaire pour la classe que je considérerais comme une implémentation de ce modèle.
Façade - À certains égards, cela est similaire au modèle d'adaptateur en termes d'être quelque chose qui relie généralement quelques systèmes.
la source
Les auteurs ont compilé les modèles à partir des conceptions observées qu'ils ont trouvées dans des applications réelles. Personne ne les utilisera probablement tous, mais ils sont tous utilisés.
la source
Décorateur .
EDIT : Dans presque tous les projets qui dépassent le stade «trivial», on se retrouve avec une interface IAction (les détails peuvent différer):
L'heure suivante, je passe à écrire de nombreuses petites classes presque triviales qui implémentent IAction. Lorsqu'ils sont combinés, ils sont très puissants et flexibles.
Par exemple an
LogAction
(écrire pour se connecter et effectuer l'IAction),NullAction
(ne rien faire et retourner true),ActionList
(effectuer une liste d'IActions, et retourner l'AND des bools). Dans certains cas , unAndAction
(retourner le ET-ing de deux actions, pourrait être court-circuité ou non),OrAction
,NotAction
faire sens aussi bien.Bien que techniquement, à partir des exemples ci-dessus, seule la LogAction est un décorateur (les autres ne fonctionnent pas sur exactement 1 IAction), je considère toujours cela comme une généralisation du modèle Decorator lorsque je crée une ActionList of LogActions of IActions.
la source
Je suppose que vous voulez restreindre la question à l'utilisation de modèles dans votre propre code / projets (pas de bibliothèques de classes et de cadres tiers).
Comme d'autres, j'ai également utilisé les modèles Factory le plus souvent. alors
la source
J'ai utilisé bon nombre des autres qui ont déjà été mentionnés (Singleton, Factory, Builder, Command, Strategy, etc ...)
Un que je n'ai pas encore vu mentionné est Flyweight, que j'ai tendance à utiliser beaucoup. J'ai fourni un exemple d'implémentation ci-dessous:
la source
La plupart des motifs originaux de Gang of Four sont toujours utilisés aujourd'hui, mais il y en a d'autres maintenant populaires qui ne figurent pas dans le livre.
Trouvez une référence pour Design Patters dans la langue que vous utilisez. Ils ont tendance à être plus concrets et à utiliser des fonctionnalités de langage spécifiques pour implémenter les modèles de manière plus succincte et élégante.
Trois excellentes ressources pour les modèles de conception:
Livre "Head First Design Patterns" - le langage de prédilection est Java, mais s'applique à tous les langages. dofactory Design Patterns - grandes et gratuites explications de modèles de conception .net avec du code. PluralSight - Design Patterns Library - celui-ci est payé, mais est trop bon pour ne pas l'inclure dans la liste.
la source
Eh bien, si vous utilisez des bibliothèques communes comme ACE, vous finissez par utiliser plus que vous ne pensez en utiliser. J'utilise largement Observer / Observable :-)
la source
J'ai utilisé un générateur au moins une fois (le même processus de conversion pourrait générer une sortie HTML ou Excel).
J'utilise fréquemment la méthode Template (pour les tâches liées à JDBC ou les contrôleurs Swing abstraits).
Une fois, j'ai dû développer de nombreuses nouvelles fonctionnalités dans une application basée sur un formulaire, ce qui était un gâchis. Je ne pouvais progresser qu'après avoir refactorisé les éléments existants vers une solution basée sur un modèle d'état. (Eh bien, la plupart du temps).
J'utilise également fréquemment des commandes (Swing Actions) et des observateurs.
Une fois, j'ai utilisé une solution de type Mememento pour détecter les changements dans les formulaires Swing. Le formulaire sérialiserait son état ce que j'ai comparé (égal ()) aux états précédents.
la source
Je crois que j'ai la plupart d'entre eux tout au long de ma carrière. le seul que je suis sûr que je n'ai pas utilisé est ce modèle d'adaptateur qui est implémenté avec l'héritage multiple sur le livre car je ne suis pas un grand fan de l'héritage multiple.
la source
J'aime le décorateur. Le seul que j'ai ajouté à ceux mentionnés est le proxy.
la source