web-dev-qa-db-fra.com

Quelle est la différence entre le motif de façade et le motif d’adaptateur?

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

69
devoured elysium

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.

98
awshepard

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.

87
Edwin Buck

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.

17
J. Burch

Façade:

Points à retenir: (de journaldev article de Pankaj Kumar) 

  1. Le motif de façade ressemble davantage à un aide pour les applications clientes.
  2. Le motif de façade peut être appliqué à n'importe quel stade du développement, généralement lorsque le nombre d'interfaces augmente et que le système devient complexe.
  3. Les interfaces de sous-système ne connaissent pas Facade et elles ne doivent pas avoir de référence à l’interface Facade} _
  4. Le motif de façade doit être appliqué pour un type d'interface similaire}, son but est de fournir une interface unique plutôt que plusieurs interfaces effectuant le même type de travail

Diagramme de classe de façade:

 enter image description here

Adaptateur:

  1. C'est un motif structurel
  2. Il est utile de travailler avec deux interfaces incompatibles _
  3. C'est fait fonctionner les choses après leur conception

Diagramme de classe de l'adaptateur:

 enter image description here

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: _

  1. Facade définit une nouvelle interface, alors que Adapter utilise une ancienne interface. L'adaptateur fait que deux interfaces existantes fonctionnent ensemble plutôt que d'en définir une entièrement nouvelle
  2. Adaptateur et façade sont tous deux des emballages; mais ce sont différentes sortes d'emballages. L'intention de Facade est de produire une interface plus simple, et l'objectif de Adapter est de concevoir une interface existante

Jetez un coup d'œil à sourcemaking article également pour une meilleure compréhension. 

8
Ravindra babu

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.

8
Mike Burton

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                           |
+--------------------------------------------------------------+-----------------------------------------------+
3
Premraj

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.

3
Pin

Comme d'habitude, il existe des similitudes entre plusieurs modèles. Mais je le verrais comme ça:

  • Une façade est utilisée pour encapsuler une couche entière et offre quelques méthodes pour y accéder "facilement"
  • Un adaptateur est utilisé, dans lequel vous avez deux composants qui devraient déjà fonctionner ensemble, mais ne le faites pas, uniquement en raison de différences "sans importance" dans l'interface.
3
Chris Lercher

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.

2
wyldebill

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.

2
Michael Finger

Après avoir lu tout cela, je dois dire que le but d’une

facade is simplicité

adaptateur est interopérabilité .

0
Vladimir Kornea

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". 

0
mexique1

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.

0
Avik Chowdhury

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.

0
Arun Ghosh