Qu'est-ce qu'une classe wrapper?
Comment ces classes sont-elles utiles?
design-patterns
wrapper
Bhaskar
la source
la source
Exactement ce que cela ressemble: une classe qui "encapsule" les fonctionnalités d'une autre classe ou API dans une API plus simple ou simplement différente.
Voir: modèle d'adaptateur , modèle de façade
la source
Les classes wrapper fournissent un moyen d'utiliser des types primitifs comme objets. Pour chaque primitive, nous avons une classe wrapper telle que,
Integer et Byte sont les classes wrapper de primitive int et byte. Il y a des temps / restrictions lorsque vous devez utiliser les primitives comme objets, donc les classes wrapper fournissent un mécanisme appelé boxing / unboxing.
Le concept peut être bien compris par l'exemple suivant:
c'est ainsi que nous pouvons utiliser le type de classe wrapper pour convertir également en d'autres types primitifs. Ce type de conversion est utilisé lorsque vous devez convertir un type primitif en objet et les utiliser pour obtenir d'autres primitives également. Pour cette approche, vous devez écrire un gros code. Cependant, la même chose peut être obtenue avec la technique de conversion simple car l'extrait de code peut être obtenu comme ci-dessous
Bien que la valeur double soit explicitement convertie en valeur entière également appelée downcasting.
la source
Une classe wrapper n'a pas nécessairement besoin d'envelopper une autre classe. Il peut s'agir d'une fonctionnalité d'encapsulation de classe API, par exemple dans un fichier dll.
Par exemple, il peut être très utile de créer une classe wrapper dll, qui prend en charge toutes les initialisations et nettoyages dll et crée des méthodes de classe qui encapsulent les pointeurs de fonction créés à partir, par exemple
GetProcAddress()
.À votre santé !
la source
Une classe wrapper est une classe qui "enveloppe" quelque chose d'autre, tout comme son nom.
La définition la plus formelle serait une classe qui implémente le modèle d'adaptateur . Cela vous permet de modifier un ensemble d'API en une forme plus utilisable et lisible. Par exemple, en C #, si vous souhaitez utiliser l'API Windows native, cela aide à l'encapsuler dans une classe conforme aux directives de conception .NET.
la source
Il existe plusieurs modèles de conception qui peuvent être appelés classes wrapper.
Voir ma réponse à "En quoi les modèles de proxy, de décorateur, d'adaptateur et de pont diffèrent-ils? "
la source
Il peut également être utile de noter que dans certains environnements, une grande partie de ce que les classes wrapper peuvent faire est remplacée par des aspects.
ÉDITER:
En général, un wrapper va développer ce que fait le wrappee, sans se soucier de l'implémentation du wrappee, sinon il n'y a aucun intérêt à envelopper par rapport à l'extension de la classe wrappée. Un exemple typique consiste à ajouter des informations de synchronisation ou une fonctionnalité de journalisation autour d'une autre interface de service, au lieu de les ajouter à chaque implémentation de cette interface.
Cela finit par être un exemple typique de programmation Aspect. Plutôt que de passer par une interface fonction par fonction et d'ajouter une journalisation passe-partout, dans la programmation d'aspect, vous définissez un pointcut, qui est une sorte d'expression régulière pour les méthodes, puis déclarez les méthodes que vous souhaitez exécuter avant, après ou autour de toutes les méthodes correspondant le pointcut. Il est probablement juste de dire que la programmation d'aspect est une sorte d'utilisation du modèle Decorator, pour lequel les classes wrapper peuvent également être utilisées, mais que les deux technologies ont d'autres utilisations.
la source
La classe wrapper est une classe qui encapsule l'autre classe et fournit l'abstraction entre le client et la classe d'origine en cours de wrappage.
la source
une classe wrapper est généralement une classe qui a un objet comme propriété privée. l'encapsuleur implémente l'API de cet objet privé et il peut donc être passé comme argument là où l'objet privé le ferait.
disons que vous avez une collection et que vous souhaitez utiliser une sorte de traduction lorsque des objets y sont ajoutés - vous écrivez une classe wrapper qui a toutes les méthodes de la collection. lorsque add () est appelé, le wrapper traduit les arguments au lieu de simplement les passer dans la collection privée.
l'encapsuleur peut être utilisé n'importe où une collection peut être utilisée, et l'objet privé peut toujours avoir d'autres objets s'y référant et le lisant.
la source
Une classe wrapper est une classe qui est utilisée pour envelopper une autre classe pour ajouter une couche d'indirection et d'abstraction entre le client et la classe d'origine qui est enveloppée.
la source
La classe wrapper est un wrapper autour d'un type de données primitif. Il représente les types de données primitifs dans leurs instances de classe correspondantes, par exemple un type de données booléen peut être représenté comme une instance de classe booléenne. Toutes les classes d'encapsuleurs primitives en Java sont immuables, c'est-à-dire qu'une fois qu'une valeur a été attribuée à une instance de classe d'encapsuleur ne peut plus être modifiée.
la source
La programmation Java fournit une classe wrapper pour chaque type de données primitif, pour convertir un type de données primitif en objet correspondant de la classe wrapper.
la source
Faire du bien-être en classe wrapper n'est pas une tâche facile. Comprendre une classe wrapper comment elle est conçue par d'autres n'est pas non plus une tâche facile. Parce que c'est une idée, pas un code. Ce n'est que lorsque vous comprenez l'idée que vous pouvez comprendre le wrapper.
la source
Les classes Wrapper ont vu le jour pour répondre à un besoin fondamental des programmeurs - c'est-à-dire utiliser des valeurs primitives partout où seuls les objets sont autorisés. Comme leur nom l'indique, les classes wrapper entourent une valeur primitive et maintiennent la valeur dans un objet. Ainsi, tous les endroits où les primitives n'étaient pas autorisées - tels que les génériques, les clés de hachage, les tableaux, etc. - les programmeurs ont maintenant la possibilité de fournir ces valeurs primitives comme types d'encapsuleurs correspondants.
De plus, ces types d'encapsuleurs ont un certain nombre de méthodes utilitaires pour la conversion du type primitif en types d'encapsulage correspondants et inversement, ainsi que de chaînes en types d'encapsulage et inversement.
J'ai écrit un article détaillé sur les classes de wrapper dans un blog qui explique le concept des types de wrapper en profondeur - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Divulgation - Ce blog m'appartient)
la source
J'ai actuellement utilisé une classe wrapper pour mon projet et les principaux avantages que j'obtiens (juste un seul avantage pour élargir l'explication du sujet):
Gestion des exceptions: Ma classe principale, qui encapsule une autre classe, a des méthodes qui génèrent des exceptions si cela se produit, j'ai donc créé une classe wrapper qui gère les exceptions et les enregistre immédiatement. Donc, dans ma portée principale, il n'y a pas de gestion des exceptions. J'appelle juste une méthode et je fais quelque chose.
Utilisation facile: je peux facilement lancer l'objet. Normalement, la phase de lancement est composée de nombreuses étapes.
Lisibilité du code: Lorsqu'un autre programmeur ouvre mon code, le code semble très clair et facile à manipuler.
Masquer les détails: si vous générez une classe qu'un autre programmeur va utiliser, vous pouvez envelopper les détails comme "gestion des erreurs, gestion des exceptions, messages de journalisation et etc ..." afin que le programmeur n'ait pas à gérer le chaos, utilise simplement les méthodes.
la source
Une classe wrapper est une classe qui sert le seul but de contenir quelque chose et d'y ajouter des fonctionnalités. En Java, car les primitives (comme les entiers, les flottants, les caractères ...) ne sont pas des objets, donc si vous voulez les traiter comme tel, vous devez utiliser une classe wrapper. Supposons que vous souhaitiez créer un vecteur d'entiers, le problème est qu'un vecteur ne contient que des objets et non des primitives. Donc, ce que vous ferez, c'est de mettre toutes les entrées dans un wrapper Integer et de l'utiliser. Exemple:
la source
un wrapper est une classe qui est utilisée pour communiquer entre deux applications différentes entre des plates-formes différentes
la source