J'ai trouvé un ancien message qui ne clarifie pas ma compréhension des modèles de conception utilisés par les classes Wrapper.En outre, à la lecture de Wikipedia, je n'obtiens aucune information claire.
Une classe Wrapper utilise-t-elle vraiment un modèle de conception ou non?
S'il utilise un modèle, alors de quel modèle s'agit-il: Decorator Pattern
, Facade Pattern
ou Adapter Pattern
?
Si vous vous référez à la primitive d'emballage
Les classes wrapper fournissent un moyen d'utiliser des types primitifs comme objets
Adapter pattern est la signification la plus exacte:
Un décorateur permet d'ajouter ou de modifier le comportement d'une interface au moment de l'exécution. L'adaptateur peut également être utilisé lorsque le wrapper doit respecter une interface particulière et doit prendre en charge le comportement polymorphe , et la façade lorsqu'une interface plus facile ou plus simple vers un l'objet sous-jacent est souhaité
Nous utilisons la capacité de la classe Wrapper pour utiliser la primitive comme objets, ce qui signifie ajouter un support à un comportement polymorphe
Les trois modèles de conception décrivent en quelque sorte un wrapper:
Eh bien, les réponses semblent indiquer que vous pouvez envelopper un objet pour de nombreuses raisons et en tant que telles, de nombreux motifs. Je vais donc essayer de donner une réponse plus générale.
Un Wrapper est fondamentalement un objet dont le seul but est de fournir quelque chose sans modifier l'objet principal (ajouter des fonctionnalités, simplifier l'API, la sérialisation, ... voir les autres réponses), ce wrapper est généralement étroitement couplé à l'objet "principal". Pour des exemples, regardez les autres réponses.
Une autre alternative pour une certaine utilisation du wrapper est l'héritage, mais pas pour tous les cas.
En tant que tel, le wrapper n'est qu'un moyen technique de faire certaines choses. Ce n'est pas un modèle en soi.
Ils ne suivent aucun des modèles de conception que vous avez mentionnés.
L'adaptateur convertit l'interface d'une classe en une autre interface. Les primitives n'implémentent aucune interface.
Decorator ajoute le comportement de à une classe implémentant une interface en l'enveloppant dans une autre qui implémente la même interface. Les primitives n'implémentent aucune interface.
Le but d'une façade est de masquer le comportement complexe de l'objet qu'il enveloppe. Il n'y a rien de moins complexe dans un langage de programmation qu'une primitive. L'indice est dans le nom. Si quoi que ce soit, les classes wrapper sont à l'opposé de cela.
En haut de mon ici, voici quelques modèles de conception qu'ils utilisent:
Integer
, Long
et Byte
utilisent un pool d'objets de poids vif objets, pour éviter création d'instances inutiles .
Boolean
un peu essaie d'être un multiton (en ce que le constructeur est déconseillé) mais en pratique ce n'est pas le cas.
Les classes Wrapper utilisent composition. La même composition que dans la maxime populaire, " Privilégiez la composition à l'héritage. " La composition n'est pas un modèle de conception; cependant, la plupart des modèles de conception OO utilisent la composition dans le cadre de leur mise en œuvre. C'est l'une des raisons pour lesquelles de nombreuses personnes ont du mal à distinguer les différents modèles de conception: l'utilisation commune de la composition les certain degré.
Il existe deux parties de base dans une relation de composition: le composer et le composé. Vous pouvez généralement considérer cela comme une relation partie/ensemble. Il peut s'agir d'un à un ou d'un à un -beaucoup. A wrapper est le compositeur, c'est-à-dire qu'il est le tout. Il peut envelopper une ou plusieurs parties composées.
De nombreux modèles de conception différents utilisent la relation de composition générale à des fins différentes. Un grand nombre de ces différents modèles sont appelés collectivement "wrappers". Le livre du GoF appelle au moins deux de ces modèles.
ADAPTER Also Known As Wrapper
page 139DECORATOR Also Known As Wrapper
page 175
En résumé, Wrapper n'est pas un modèle de conception unique; il s'agit plutôt d'une catégorie de modèles de conception. Incidemment, nous voyons la même dynamique avec le terme Factory . Il n'y a pas de modèle de conception unique nommé Factory; il s'agit plutôt d'une catégorie de modèles de conception.