Quelle est la différence entre la Façade et l'Adaptateur?
j'ai lu les deux définitions et elles semblent identiques. Quelqu'un pourrait-il faire remarquer quelles sont leurs différences?
Merci
13 réponses
la page wiki motif de façade a une brève note à ce sujet.
" un adaptateur est utilisé lorsque l'emballage doit respecter une interface particulière et doit supporter un polymorphe comportement. D'autre part, une façade est utilisé quand on veut un plus facile ou interface plus simple de travailler avec."
j'ai entendu une analogie que vous devriez penser à votre télécommande universelle que vous avez mis en place pour travailler avec tous vos différents systèmes stéréo - vous appuyez sur "on" et il se trouve sur votre décodeur, votre récepteur et votre TÉLÉVISEUR. Peut-être que c'est un cinéma maison très chic et il éteint les lumières et dessine les ombres aussi. C'est une façade - un bouton/fonction qui prend soin d'un ensemble plus compliqué d'étapes.
le motif de L'adaptateur ne relie que deux interfaces incompatibles.
EDIT: UN rapide parallèle avec le motif Adaptateur (en fonction sur les commentaires) pourrait être quelque chose comme un adaptateur DVI vers VGA. Les cartes vidéo modernes sont souvent DVI, mais vous avez un vieux moniteur VGA. Avec un adaptateur qui se connecte à l'entrée DVI attendue de votre carte vidéo, et a sa propre entrée VGA, vous serez en mesure de faire fonctionner votre vieux moniteur avec votre nouvelle carte vidéo.
Adaptateur = = faire une cheville carrée s'insérer dans un trou rond.
façade = = un panneau de contrôle unique pour exécuter tous les composants internes.
honnêtement, beaucoup de modèles pourraient être mis en œuvre de la même manière programmatique -- la différence est dans l'intention.
La Carte modèle de conception est destinée à "traduire" l'interface d'un ou de plusieurs classes dans une interface que le client s'attend à utiliser -- la carte de traduire les appels à l'interface attendue dans l'interface réelle enveloppés classes d'utilisation.
le motif de la façade est utilisé lorsqu'une interface plus simple est recherchée (et encore une fois, pourrait être mis en œuvre de la même manière en enveloppant les classes offensantes.) Vous ne diriez pas que vous utilisez une façade lorsque l'interface existante est incompatible, juste au moment où vous avez besoin de la rendre plus lisible, moins mal conçue, etc.
une façade est conçue pour organiser plusieurs services derrière une seule passerelle de service. Un adaptateur est conçu pour fournir un moyen d'utiliser une interface connue pour accéder à un inconnu.
façade:
plats à emporter Clés : ( à partir de journaldev article par Pankaj Kumar)
- le motif de la façade ressemble plus à un helper for client applications
- motif de façade peut être appliqué à tout point de développement, généralement lorsque le nombre d'interfaces se développe et le système devient complexe .
- Les interfaces du sous-système ne sont pas au courant de la façade et ils ne devraient pas avoir de référence de L'interface de façade
- le motif de façade doit être appliqué pour des types d'interfaces similaires , son but est de fournir une interface unique plutôt que des interfaces multiples qui fait le type similaire de travaux
schéma de classe de la façade:
Adaptateur:
- C'est un modèle structurel
- il est utile de travailler avec deux interfaces incompatibles
- Il rend les choses fonctionnent après ils sont conçus
schéma de classe de L'Adaptateur:
vous pouvez trouver plus de détails sur adaptateur dans ce post SE:
différence entre le dessin du pont et le dessin de L'Adaptateur
principales différences:
- façade définit une nouvelle interface, tandis que L'adaptateur utilise une ancienne interface . L'adaptateur deux les interfaces de travailler ensemble, par opposition à la définition d'un tout nouveau
- adaptateur et façade sont à la fois des emballages, mais ils sont différents types d'emballages. L'intention de la Façade est de produire une interface plus simple, et l'intention de l'Adaptateur à la conception d'une interface existante
regarder sourcemaking article trop pour une meilleure compréhension.
Comme d'habitude, il existe des similitudes entre plusieurs modèles. Mais je le verrais comme ceci:
- une façade est utilisée pour encapsuler une couche entière, et offre certaines méthodes pour y accéder "commodément"
- un adaptateur est utilisé, où vous avez deux composants qui devraient déjà fonctionner ensemble, mais ne le font pas, seulement en raison de quelques différences" sans importance " dans l'interface.
je vais essayer de l'expliquer en termes clairs, sans beaucoup de formalité.
Imaginez que vous avez des classes de domaines et de L'interface utilisateur que vous voulez interagir avec eux. Une façade peut être utilisée pour fournir des fonctions qui peuvent être appelées à partir de la couche UI de sorte que la couche UI ne connaît pas d'autres classes de domaines que la façade. Cela signifie qu'au lieu d'appeler les fonctions dans les classes de domaines vous appelez une seule fonction de la façade, qui sera responsable de appeler les fonctions nécessaires des autres classes.
un adaptateur, d'autre part, peut être utilisé pour intégrer d'autres composants externes qui pourraient avoir la même fonctionnalité dont vous avez besoin, mais leurs fonctions ne sont pas appelées de la même manière. Dites que vous avez une classe Car
dans votre domaine et que vous travaillez avec un fournisseur de voiture externe qui a également une classe de voiture définie. Dans cette classe, vous avez la fonction car.getDoors()
mais le prestataire externe a l'équivalent car.getNumDoors()
. Vous ne voulez pas changer la façon dont vous appelez cette fonction, de sorte que vous pouvez utiliser une classe d'adaptateur pour envelopper la classe de voiture externe de sorte qu'un appel à getDoors()
de l'adaptateur est délégué à getNumDoors()
de la classe externe.
permet à deux interfaces auparavant incompatibles de fonctionner l'une avec l'autre. Dispose de 2 interfaces distinctes en jeu.
le motif de la façade prend une interface connue, c'est-à-dire de faible niveau/grain fin, et l'enveloppe avec une interface de plus haut niveau/grain cours. A une interface unique, qui a été simplifiée en l'enveloppant avec une autre.
fait fonctionner ensemble deux interfaces.
Facade expose une seule classe à un niveau plus élevé, et plus limité. Par exemple, une façade de modèle de vue ne peut exposer que certaines propriétés en lecture seule d'une classe inférieure.
La façadeest généralement contrastée avec L'Adaptateur.
+--------------------------------------------------------------+-----------------------------------------------+
| Facade | Adapter |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components | Works with single component |
| Control panel is an example | A power adapter is an example |
| High-level interface | Low-level interface |
+--------------------------------------------------------------+-----------------------------------------------+
j'ai lu les deux définitions et elles semblent identiques.
vraiment ?
j'ai remarqué que le terme Adaptateur est parfois utilisé pour décrire ce qui est en fait une stratégie , peut-être parce que le mot est plus expressif.
par exemple, dans Zend Framework , toutes les classes Adaptateur sont en fait des implémentations du stratégie modèle, parce qu'ils enveloppent seulement le code natif derrière les classes, pour avoir plusieurs comportements.
Les adaptateurssont souvent utilisés pour envelopper le code" legacy " ou "old-style".
ayant lu tout cela, je dois dire que le but d'un
façade est simplicité
adaptateur est interopérabilité .
façade
résume la complexité pour fournir une interface plus simple. Supposons, par exemple, qu'un système D'exploitation d'ordinateur fasse abstraction de la complexité du matériel sous-jacent. Ou un langage de programmation de haut niveau(Python/JavaScript) abstrait la complexité par rapport à un langage de bas niveau(C).
Adaptateur
c'est analogue à un adaptateur matériel. Dites que vous voulez connecter un USB device
un serial port
, vous aurez besoin d'un USB-serial port adapter
.