2012-05-21 5 views
0

J'ai une exigence spécifique comme:modèle de conception pour le paramètre Méthode

serviceUtility.invokeService(requestObj) 

La méthode ci-dessus prend la requestObj, ce qui est pas toujours le même objet. Il peut contenir n'importe quel objet dépend de la fonctionnalité. Mais, le invokeService est la méthode générale doit gérer la demande basée sur l'objet. Je veux automatiser afin qu'il identifie dynamiquement l'objet et agisse sur le même. Cela signifie que l'implémentation dans la classe serviceUtility fonctionnerait pour n'importe quel type d'objet. Parce que la logique est la même pour tout le monde. Maintenant je vérifie le type d'objet et fais la logique.

+0

Donc, vous voulez une sorte de logique en fonction du type de 'requestObj'? Pourquoi? Pourquoi ne pas mettre cette logique dans la hiérarchie de classe 'requestObj'? – Brady

+0

Vous avez dit que "l'implémentation dans la classe serviceUtility fonctionnerait pour n'importe quel type d'objet", mais vouliez-vous vraiment dire * any *? Pouvez-vous passer une chaîne, un uri, un bouton? Existe-t-il un ensemble commun de propriétés ou de méthodes dans les objets que vous transmettez à invokeService? – tcarvin

Répondre

1

Parce que la logique est la même pour chaque

Dans ce cas, vous devez utiliser Generic programming. Par exemple, en Java:

public <T extends Request> void invokeService(T object) { 
    object.run(); 
} 

Plus tard, dans le client:

utility.invokeService(new FooRequest()); 
utility.invokeService(new BarRequest()); 
1

En fonction de votre langage de programmation, vous pouvez le faire dynamiquement en utilisant la réflexion (par exemple en Java/C#); mais ce sera compliqué et difficile à faire fonctionner parfaitement.

Vous devez réorganiser votre code, si possible, et créer une interface commune implémentée par toutes les classes en question. Alors vous savez pour sûr qu'ils ont les bonnes méthodes et peuvent les appeler sans avoir à découvrir leur type exact

Questions connexes