Différences entre le modèle fondé sur les procurations et le modèle fondé sur les décorateurs

Pouvez-vous donner une bonne explication de ce qu'est la différence entre Proxy et Décorateur ?

la principale différence que je vois est que lorsque nous supposons que mandataire utilise composition et décorateur utilise agrégation alors il semble clair qu'en utilisant plusieurs (un ou plusieurs) décorateurs vous peut modifier / ajouter des fonctionnalités à une instance préexistante (decorate), tandis que Proxy possède sa propre instance interne de classe proxied et lui délègue l'ajout de certaines fonctionnalités supplémentaires (comportement de proxy).

la question Est - ce que mandataire créé avec agrégation est toujours mandataire ou plutôt décorateur ? Est-il permis (par définition dans les modèles GEF) de créer Proxy avec agrégation?

84
demandé sur Mirai Mann 2013-09-04 20:07:16

5 réponses

Décorateur Modèle se concentre sur l'ajout dynamique de fonctions à un objet, alors que Proxy Modèle met l'accent sur le contrôle de l'accès à un objet.

EDIT: -

la Relation entre un Proxy et le vrai sujet est généralement définie au moment de la compilation, Proxy instancie une certaine manière, alors que le Décorateur est assigné au sujet à l'exécution, ne connaissant que l'interface du sujet.

59
répondu Rahul Tripathi 2016-11-09 17:59:48

la réponse acceptée n'est pas tout à fait correcte. La véritable différence n'est pas la propriété (composition par opposition à agrégation), mais plutôt l'information sur les types.

Un Décorateur est toujours passé son délégataire. Un Proxy 151950920 "pourrait le créer lui-même, ou il pourrait le faire injecter.

mais un Proxy toujours connaît le type (plus) spécifique du délégataire. En d'autres termes, le Proxy et son délégataire auront le même type de base, mais le Proxy pointera vers un type dérivé. Un décorateur pointe sur son propre type de base. Ainsi, la différence réside dans les informations sur le type de délégataire.

Dans un langage dynamique, si le délégataire est injecté et arrive à avoir le même interface, alors il n'y a pas de différence.

La réponse à votre question est "Oui".

75
répondu cdunn2001 2015-01-05 21:53:09

Décorateur obtenir une référence pour objet décoré (généralement par le constructeur), tandis que Proxy responsable de le faire par lui-même.

Proxy ne peut pas instancier d'emballage d'objet (comme ce ne Orm pour éviter l'accès à la DB si l'objet de champs/getters ne sont pas utilisés), tandis que Décorateur tenez toujours un lien à de véritables enveloppé d'instance.

Proxy habituellement utilisés par les cadres pour ajouter de la sécurité ou de cache et de farniente et construit par cadre (ce n'est pas régulière développeur lui-même).

Decorator habituellement utilisé pour ajouter un nouveau comportement aux classes anciennes ou héritées par le développeur lui-même basé sur l'interface plutôt que sur la classe actuelle (il fonctionne donc sur une large gamme d'instances d'interface, Proxy est autour de la classe de béton).

34
répondu gavenkoa 2013-10-23 13:51:55

principales différences:

  1. Proxy fournit la même interface. Decorator fournit une interface améliorée.
  2. Décorateur et Proxy ont des objectifs différents, mais des structures similaires. Les deux décrivent comment fournir un niveau d'indirectement à un autre objet, et les mises en œuvre conservent une référence à l'objet auquel ils transmettent les requêtes.
  3. Decorator peut être considéré comme un Composite dégénéré avec un seul composant. Cependant, un décorateur ajoute des responsabilités supplémentaires - il n'est pas destiné à l'agrégation d'objets.
  4. Decorator supports récursifs composition
  5. Le Décorateur classe déclare une composition relation à L'interface LCD (plus petit dénominateur de classe), et ce membre de données est initialisé dans son constructeur.
  6. Utiliser Proxy pour l'initialisation tardive, l'amélioration de la performance par la mise en cache de l'objet et du contrôle de l'accès pour le client/visiteur

Sourcemaking article cite les similitudes et différences d'une excellente manière.

Liées SE questions/liens:

quand utiliser le motif décorateur?

Quelle est la différence exacte entre les modèles adaptateur et Proxy?

11
répondu Ravindra babu 2017-09-20 05:11:01

mandataire et décorateur diffèrent dans le but et où ils se concentrent sur la mise en œuvre interne. Le Proxy est pour utiliser un objet distant, cross process, ou cross-network comme s'il s'agissait d'un objet local. Decorator est pour ajouter un nouveau comportement à l'interface originale.

bien que les deux modèles soient de structure similaire, L'essentiel de la complexité du Proxy réside dans l'assurance de communications appropriées avec l'objet source. Décorateur, d'autre part, se concentre sur la mise en œuvre de la valeur ajoutée de comportement.

0
répondu James Lin 2018-02-07 02:05:10