2016-02-08 2 views
2

Pourquoi utiliser une classe "Dynamic Proxy" au lieu du modèle "proxy standard"?Quand utiliser le modèle "Dynamic Proxy class" ou "proxy standard"?

Quels sont les inconvénients ou les avantages des deux?

Il semble que les deux ont le même résultat final, sauf qu'ils sont implémentés différemment.

classe proxy dynamique https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

Une classe de proxy dynamique est une classe qui implémente une liste d'interfaces spécifiées lors de l'exécution de telle sorte qu'un appel de méthode à travers l'un des interfaces sur une instance de la classe volonté être codé et envoyé à un autre objet via une interface uniforme. Ainsi, une classe proxy dynamique peut être utilisée pour créer un objet proxy de type sécurité pour une liste d'interfaces sans nécessiter de pré-génération de la classe proxy, par exemple qu'avec les outils de compilation. Les invocations de méthode sur une instance d'une classe proxy dynamique sont distribuées à une seule méthode dans le gestionnaire d'appel de l'instance et elles sont codées avec un objet java.lang.reflect.Method identifiant la méthode invoquée et un tableau de type Objet contenant les arguments.

modèle proxy standard https://en.wikipedia.org/wiki/Proxy_pattern

Une procuration, sous sa forme la plus générale, est un fonctionnement de classe comme une interface à autre chose. Le proxy peut s'interfacer avec n'importe quelle connexion réseau, un gros objet en mémoire, un fichier ou une autre ressource coûteuse ou impossible à dupliquer. En résumé, un proxy est un wrapper ou un objet agent qui est appelé par le client pour accéder à l'objet serveur réel derrière les scènes. Dans le proxy des fonctionnalités supplémentaires peuvent être fournies, par exemple la mise en cache lorsque les opérations sur l'objet réel sont gourmandes en ressources, ou en vérifiant des conditions préalables avant que les opérations sur l'objet réel soient invoquées. Pour le client, l'utilisation d'un objet proxy est similaire à l'utilisation de l'objet réel, car les deux implémentent la même interface.

Répondre

1

Vous semblez répondre à votre propre question. Vous devriez utiliser celui qui est le plus facile à implémenter pour votre cas d'utilisation.

Vous devez utiliser un proxy dynamique lorsque vous ne disposez pas d'une implémentation pour chaque méthode au moment de la compilation. Par exemple, les bibliothèques de tests de simulation utilisent les proxies dynamiques pour écrire du code pour gérer n'importe quelle méthode de façon générique. Par exemple: