2009-03-23 8 views
2

Le motif de conception de décorateur est une très bonne solution pour étendre une fonctionnalité de classe. Par exemple, si je veux des méthodes de pré et de post-traitement sur une méthode de classe existante, je peux créer un décorateur et remplacer la méthode existante dans la classe de base et appeler mes méthodes pré et post-traitement respectivement.Décorateurs et méthodes virtuelles

Ma question est la suivante, l'exigence énoncée ci-dessus se présentera rarement lors de la conception de l'application. Je ne peux pas marquer toutes les méthodes que je crée comme virtuelles afin qu'elles puissent être remplacées par un décorateur. Par conséquent, je devrai recourir à la méthode de dissimulation.

Existe-t-il une meilleure façon de concevoir mes classes de sorte que dans les situations où je souhaite remplacer toutes les méthodes, cela peut être fait de la meilleure manière possible.

Répondre

1

avez-vous pensé à utiliser des aspects (AOP)? -Ajout après avoir écrit le commentaire: Vous pouvez jeter un coup d'oeil au projet log4postsharp et voir comment ils utilisent les attributs de la méthode. Si vous compilez et ouvrez la DLL à l'aide de f. Reflector, vous verrez que les actions pré et post sont ajoutées au runtime.

comportement -such peut également être ajouté à l'aide xml-configs

+1

Pouvez-vous me donner un exemple pour faire ce qui précède en utilisant les concepts AOP. –

+0

J'ai ajouté plus d'informations dans la réponse ci-dessus .. – ThorHalvor

0

Habituellement, lorsque je décore une classe, je le fais par composition, pas l'héritage. De cette façon, vous n'avez pas besoin de remplacer quoi que ce soit.

+0

Vous avez encore besoin d'extraire une définition d'interface que votre classe de décorateur (ainsi que la classe décorée) peut implémenter, sinon cela ne fonctionnera généralement pas. –

+0

Bien sûr. Je cache habituellement les classes concrètes derrière les interfaces basées sur les rôles. –

Questions connexes