J'ai lu les deux définitions et elles semblent à peu près les mêmes. Quelqu'un pourrait-il indiquer quelles sont leurs différences?
Merci
La page Modèle de façade wiki contient une brève note à ce sujet.
"Un adaptateur est utilisé lorsque le wrapper Doit respecter une interface particulière Et doit prendre en charge un comportement polymorphe . D'autre part, une façade .__ est utilisée quand on veut un plus simple ou interface plus simple pour travailler avec. "
J'ai entendu une analogie voulant que vous pensiez à votre télécommande universelle que vous avez configurée pour fonctionner avec tous vos différents systèmes stéréo: vous appuyez sur la touche "On" pour allumer votre décodeur, votre récepteur et votre téléviseur. C’est peut-être un cinéma maison très chic qui atténue les lumières et dessine les ombres. C'est une façade - un bouton/une fonction qui prend en charge un ensemble plus complexe d'étapes.
Le modèle d’adaptateur ne fait que relier deux interfaces incompatibles.
EDIT: Une analogie rapide pour le modèle d'adaptateur (basé sur les commentaires) pourrait ressembler à un adaptateur DVI-VGA. Les cartes vidéo modernes sont souvent DVI, mais vous avez un ancien moniteur VGA. Avec un adaptateur connecté à l'entrée DVI attendue de votre carte vidéo et disposant de sa propre entrée VGA, vous pourrez faire fonctionner votre ancien moniteur avec votre nouvelle carte vidéo.
Adaptateur == permettant à un piquet carré de s’insérer dans un trou rond.
Façade == un seul panneau de commande pour exécuter tous les composants internes.
Honnêtement, de nombreux modèles pourraient être mis en œuvre de la même manière par programme - la différence réside dans l'intention.
Le modèle de conception de l'adaptateur est destiné à "traduire" l'interface d'une ou de plusieurs classes en une interface que le client s'attend à utiliser. L'adaptateur traduira les appels de l'interface attendue dans l'interface réelle utilisée par les classes encapsulées.
Le modèle Façade est utilisé lorsqu'une interface simple est souhaitée (et peut être implémenté de la même manière en encapsulant les classes incriminées.) Vous ne diriez pas que vous utilisez une façade lorsque l'interface existante est incompatible, au moment opportun pour le rendre plus lisible, moins mal conçu, etc.
Façade:
Points à retenir: (de journaldev article de Pankaj Kumar)
Diagramme de classe de façade:
Adaptateur:
Diagramme de classe de l'adaptateur:
Vous pouvez trouver plus de détails sur Adapter dans ce post SE:
Différence entre modèle de pont et modèle d’adaptateur
Principales différences: _
Jetez un coup d'œil à sourcemaking article également pour une meilleure compréhension.
Une façade est conçue pour organiser plusieurs services derrière une seule passerelle de services. Un adaptateur est conçu pour fournir un moyen d'utiliser une interface connue pour accéder à une interface inconnue.
La façade est 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 |
+--------------------------------------------------------------+-----------------------------------------------+
Je vais essayer d'expliquer cela en termes simples, sans beaucoup de formalité.
Imaginez que vous ayez des classes de domaine et de l'interface utilisateur avec lesquelles vous souhaitez interagir. Une façade peut être utilisée pour fournir des fonctions pouvant être appelées à partir de la couche d'interface utilisateur afin que celle-ci ne connaisse aucune classe de domaine autre que la façade. Cela signifie qu'au lieu d'appeler les fonctions des classes de domaine, vous appelez une seule fonction de la façade, qui sera chargée d'appeler les fonctions nécessaires à partir des autres classes.
Un adaptateur, par contre, peut être utilisé pour intégrer d’autres composants externes qui pourraient avoir les mêmes fonctionnalités que celles dont vous avez besoin, mais leurs fonctions ne sont pas appelées de la même façon. Supposons que vous avez une classe Car
dans votre domaine et que vous travaillez avec un fournisseur de voiture externe qui a également une classe Car définie. Dans cette classe, vous avez la fonction car.getDoors()
mais le fournisseur externe a l'équivalent car.getNumDoors()
. Vous ne souhaitez pas modifier la façon dont vous appelez cette fonction. Vous pouvez donc utiliser une classe d'adaptateur pour envelopper la classe Car externe de sorte qu'un appel à getDoors()
de l'adaptateur soit délégué à getNumDoors()
de la classe externe.
Comme d'habitude, il existe des similitudes entre plusieurs modèles. Mais je le verrais comme ça:
Le modèle d'adaptateur permet à deux interfaces précédemment incompatibles de fonctionner l'une avec l'autre. A 2 interfaces distinctes en jeu.
Le modèle Façade prend une interface connue, de bas niveau/grain fin, et l'enveloppe avec une interface de niveau supérieur/couche granuleuse. Possède une seule interface, qui a été simplifiée par une autre interface.
L'adaptateur fait que deux interfaces fonctionnent ensemble.
La façade expose une classe unique à un niveau plus élevé et plus limité. Par exemple, une façade de modèle de vue peut uniquement exposer certaines propriétés en lecture seule d'une classe de niveau inférieur.
Après avoir lu tout cela, je dois dire que le but d’une
facade is simplicité
adaptateur est interopérabilité .
J'ai lu les deux définitions et elles semblent à peu près les mêmes.
Vraiment ?
J'ai remarqué que le terme Adaptateur est parfois utilisé pour décrire ce qui est en fait un Stategy , peut-être parce que le mot est plus expressif.
Par exemple, dans Zend Framework , toutes les classes de Adapter sont en fait des implémentations du modèle Strategy , car elles enveloppent uniquement le code natif derrière des classes pour avoir plusieurs comportements.
Les adaptateurs sont souvent utilisés pour envelopper du code hérité ou "ancien".
Le modèle d'adaptateur relie deux interfaces incompatibles en fournissant une nouvelle interface.
Le motif de façade simplifie un sous-système complexe (comportant plusieurs composants) avec une seule interface.
Façade
Abstraction de la complexité pour fournir une interface plus simple. Par exemple, un système d'exploitation d'ordinateur abstrait la complexité du matériel sous-jacent. Ou encore, un langage de programmation de haut niveau (Python/JavaScript) réduit la complexité par rapport à un langage de bas niveau (C).
Adaptateur
C'est analogue à un adaptateur matériel. Supposons que vous souhaitiez connecter un USB device
à un serial port
, vous aurez besoin d'un USB-serial port adapter
.