Différence entre le modèle d'adaptateur d'objet et le modèle d'adaptateur de classe
Comment décider quand utiliser l'adaptateur d'objet et quand utiliser l'adaptateur de classe?
Énoncé du problème:
Pour créer site web de réseau social et de fournir la fonctionnalité d'importation de facebook, google plus et orkut. Je ne suis pas en mesure de décider de l'utilisation de l'objet de l'adaptateur ou de l'adaptateur de classe.
J'ai eu l'examiner L'adaptateur: Adaptateur de Classe vs Adaptateur d'Objetmais ne pouvait pas comprendre l'essence de la différence.
source d'informationauteur Tilak
Vous devez vous connecter pour publier un commentaire.
La principale différence:
Adaptateur de classe utilise héritage et ne peut envelopper un classe. Il ne peut pas envelopper une interface puisque, par définition, elle doit dériver de certains de la classe de base.
Adaptateur d'objet utilise composition et peut encapsuler des interfaces ou des classes, ou les deux. Il peut le faire car il contient, à titre privé, encapsulé membre de, la classe ou l'interface instance de l'objet il s'enroule.
La différence est subtile. Habituellement, l'autre approche (en privilégiant les la composition au cours de l'héritage) est préférable, comme expliqué dans le lien que je vais vous citer ici:
Adaptateur d'objet:
Adaptateur De Classe
En termes Simples,
Adaptateur de classe utilise des sous-classement et Adaptateur d'Objet utilise délégation par l'aide de la composition.
Exemple:
Ci-dessus est un exemple de Classe de l'Adaptateur. Nous avons adapté MyExistingServiceClass à ClientInterface en appelant existant méthode show() de l'intérieur de la mise en œuvre de l'affichage().
Convertir cette adaptateur d'objet, le code sera comme :
Maintenant quand utiliser l'adaptateur d'Objet à la place de Classe adatper de,
Quand on n'est pas à sous-classe de la classe qui va être adapté par interface du client. De tels exemples, lorsque MyExistingServiceClass est déclarée comme définitive.
Lorsque le client s'attend à un contrat qui n'est pas une interface, mais une classe abstraite de la mise en œuvre. Dans ce cas, nous n'avons pas d'autre moyen que de la sous-classe le client attend de la classe et que nous ne pouvons pas sous-classe plus d'une classe, il n'y a pas d'autre moyen que d'utiliser la classe pour être adapté en tant que composition.
Quand vous en avez besoin pour s'adapter à plusieurs objets. De tels cas sont quand vous n'êtes pas en travaillant directement avec l'objet à être adapté. Un bon exemple ici serait la JTable classe javax.swing. Cette classe crée une interface utilisateur graphique (GUI) composant de tableau rempli avec les informations de votre carte nourrit. Pour afficher des données à partir de votre domaine, JTable fournit les constructeurs qui acceptent une instance de la TableModel
défini dans javax.swing.table. JDK offre un résumé de la mise en œuvre de TableModel avec AbstractTableModel.
Ici, nous avons adapté MyDomainObject pour être utilisé avec AbstractTableModel.
Un adaptateur de classe utilise l'héritage multiple pour adapter une interface à l'autre: (selon votre langage de programmation: Java & C# ne supporte pas l'héritage multiple)
Un adaptateur d'objet dépend de la composition d'objet:
Images Source: Modèle de Conception (Éléments de Logiciels Orientés Objets Réutilisables) livre