Lorsque vous utilisez le Pont de Modèle? Comment est-il différent de l'Adaptateur?
Quelqu'un a déjà utilisé le Pont De Modèle dans une application du monde réel? Si oui, comment avez-vous l'utiliser? Est-ce moi, ou est-ce juste l'Adaptateur Modèle avec une petite injection de dépendance jeté dans le mélange? Est-il vraiment mériter son propre patron?
Vous devez vous connecter pour publier un commentaire.
Un exemple classique du Pont motif est utilisé dans la définition des formes dans l'INTERFACE utilisateur de l'environnement (voir la Pont modèle entrée de Wikipedia). Le Pont motif est un composite de la Modèle et Stratégie modèles.
C'est un point de vue commun de certains aspects de l'Adaptateur dans le Pont de modèle. Cependant, pour citer cet article:
Il y a une combinaison de Federico est et Jean réponses.
Lorsque:
Refactoriser à:
Le Pont motif est une application de l'ancien conseil, préférez la composition au cours de l'héritage".
Il devient utile lorsque vous devez sous-classe des moments différents, dans des façons qui sont orthogonaux l'un à l'autre. Dire que vous devez mettre en œuvre une hiérarchie de formes colorées. Vous n'auriez pas sous-classe de la Forme avec le Rectangle et le Cercle, et de la sous-classe Rectangle avec RedRectangle, BlueRectangle et GreenRectangle et de même pour le Cercle, le feriez-vous? Vous préférez-à-dire qu'à chaque Forme a une Couleur et à mettre en œuvre une hiérarchie des couleurs, et c'est le Pont de Modèle. Eh bien, je ne voudrais pas mettre en œuvre une "hiérarchie des couleurs", mais vous voyez l'idée...
Lorsque:
Refactoriser à:
L'adaptateur et le Pont sont certainement liés, et la distinction est subtile. Il est probable que certaines personnes qui pensent qu'ils sont à l'aide de l'un de ces modèles sont en fait à l'aide de l'autre modèle.
L'explication que j'ai vu, c'est que l'Adaptateur est utilisé lorsque vous essayez d'unifier les interfaces de certaines incompatible classes qui existent déjà. La Carte fonctionne comme une sorte de traducteur à des implémentations qui pourrait être considéré comme héritage.
Alors que le Pont motif est utilisée pour le code qui est plus susceptible d'être greenfield. Vous êtes à la conception du Pont de fournir une interface abstraite pour une mise en œuvre qui doit varier, mais vous pouvez également définir l'interface de ces classes d'implémentation.
Pilotes de périphérique est souvent citée comme un exemple de Pont, mais je dirais que c'est un Pont si vous êtes à la définition de l'interface de spécification pour les fournisseurs d'appareils, mais c'est un Adaptateur si vous prenez des pilotes de périphériques existants et de faire un wrapper-classe afin de fournir une interface unifiée.
Donc le code-sage, les deux modèles sont très similaires. Entreprise sages, ils sont différents.
Voir aussi http://c2.com/cgi/wiki?BridgePattern
Dans mon expérience, le Pont est assez souvent motif récurrent, parce que c'est la solution quand il y a deux dimensions orthogonales dans le domaine. E. g. les formes et les méthodes de dessin, les comportements et les plates-formes, de formats de fichiers et sérialiseurs et ainsi de suite.
Et un conseil: toujours penser à des modèles de conception à partir du point de vue conceptuel, non pas à partir de la perspective de mise en œuvre. Du point de vue des droits, le Pont ne peut pas être confondue avec l'Adaptateur, car il permet de résoudre un autre problème, et la composition est supérieure à l'héritage non pas à cause de l'amour de lui-même, mais parce qu'il permet de traiter des orthogonale préoccupations séparément.
L'intention de Pont et Adaptateur est différent, et nous avons besoin des deux modèles séparément.
Pont motif:
Utiliser le Pont modèle:
@ John Sonmez réponse montre clairement l'efficacité de pont modèle dans la réduction de la hiérarchie de classe.
Vous pouvez consulter ci-après la documentation lien pour obtenir un meilleur aperçu de pont modèle avec le code exemple
L'adaptateur:
Principales différences:
Liées SE question avec le diagramme UML et le code de travail:
La différence entre le Pont du motif et de l'Adaptateur
Des articles utiles:
sourcemaking pont modèle de l'article
sourcemaking adaptateur modèle de l'article
journaldev pont modèle de l'article
EDIT:
Pont Modèle de l'exemple du monde réel ( Comme par meta.stackoverflow.com suggestion, la documentation du site exemple dans ce post, puisque la documentation sun-set)
Pont motif découple l'abstraction de la mise en œuvre afin que les deux peuvent varier de manière indépendante. Il a été réalisé avec la composition plutôt que de l'héritage.
Pont de modèle UML à partir de Wikipedia:
Vous avez quatre composantes de ce modèle.
Abstraction
: Il définit une interfaceRefinedAbstraction
: Il met en œuvre l'abstraction:Implementor
: Il définit une interface pour la mise en œuvreConcreteImplementor
: Il met en oeuvre chargé de l'implémentation de l'interface.The crux of Bridge pattern :
Deux orthogonaux les hiérarchies de classe à l'aide de la composition (et pas d'héritage). La hiérarchie d'Abstraction et de mise en Œuvre de la hiérarchie peut varier de manière indépendante. La mise en œuvre ne se réfère jamais à l'Abstraction. Abstraction contient de la mise en Œuvre de l'interface en tant que membre (par composition). Cette composition réduit encore un niveau de la hiérarchie d'héritage.Mot réel de cas d'Utilisation:
Permettre de véhicules différents à avoir les deux versions du manuel et automatique système d'engrenage.
Exemple de code:
de sortie:
Explication:
Vehicle
est une abstraction.Car
etTruck
sont deux des implémentations concrètes deVehicle
.Vehicle
définit une méthode abstraite :addGear()
.Gear
est chargé de l'implémentation de l'interfaceManualGear
etAutoGear
sont deux implémentations deGear
Vehicle
contientimplementor
interface plutôt que la mise en œuvre de l'interface.Compositon
de chargé de l'implémentation de l'interface est le point crucial de ce modèle : Il permet d'abstraction et de mise en œuvre de varier de manière indépendante.Car
etTruck
définir la mise en œuvre ( redéfini l'abstraction) pour le prélèvement :addGear()
: Il contientGear
- SoitManual
ouAuto
Cas d'utilisation(s) pour Pont motif:
J'ai utilisé le pont schéma à l'œuvre. Je programme en C++, où il est souvent appelé le PIMPL idiome (pointeur de la mise en œuvre). Il ressemble à ceci:
Dans cet exemple
class A
contient l'interface, etclass Aimpl
contient la mise en œuvre.Une utilisation de ce pattern est seulement à exposer certains des membres publics de la classe d'implémentation, mais pas d'autres. Dans l'exemple seulement
Aimpl::foo()
peut être appelé par le biais de l'interface publique deA
, mais pasAimpl::bar()
Un autre avantage est que vous pouvez définir
Aimpl
dans un autre fichier d'en-tête ne doivent pas être compris par les utilisateurs deA
. Tout ce que vous avez à faire est d'utiliser une déclaration anticipée deAimpl
avantA
est défini, et déplacer les définitions de toutes les fonctions de membre de référencementpImpl
dans le .fichier cpp. Cela vous donne la possibilité de garder leAimpl
en-tête privé, et de réduire le temps de compilation.De mettre en forme l'exemple de code:
La sortie est:
Noter la facilité avec laquelle de nouvelles couleurs et de formes peut être ajouté au système, sans aboutir à une explosion de la sous-classes en raison de permutations.
pour moi je le vois comme un mécanisme où vous pouvez échanger des interfaces. Dans le monde réel, vous pourriez avoir une classe qui peut utiliser plus d'une interface Bridge vous permet de swap.