software patrones patron orientado objetos fachada ejercicio ejemplo diseño java c# design-patterns adapter facade

java - patrones - ¿Cuál es la diferencia entre la fachada y el patrón del adaptador?



patrones de diseño java (12)

He estado leyendo ambas definiciones y parecen ser las mismas. ¿Alguien podría señalar cuáles son sus diferencias?

Gracias


He estado leyendo ambas definiciones y parecen ser las mismas.

De Verdad ?

Me he dado cuenta de que el término Adaptador a veces se usa para describir lo que de hecho es una Estrategia , tal vez porque la palabra es más expresiva.

Por ejemplo, en Zend Framework , todas las clases de Adapter son en realidad implementaciones del patrón de Estrategia , ya que solo envuelven el código nativo detrás de las clases, para tener varios comportamientos.

Los adaptadores se utilizan a menudo para envolver código heredado o de "estilo antiguo".


La fachada generalmente se contrasta con el adaptador.

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


Adaptador == haciendo un ajuste de clavija cuadrada en un agujero redondo.

Fachada == un solo panel de control para ejecutar todos los componentes internos.


Como de costumbre, existen similitudes entre varios patrones. Pero lo vería así:

  • Una fachada se usa para encapsular una capa completa y ofrece algunos métodos para acceder a ella "cómodamente"
  • Se usa un adaptador, donde tiene dos componentes que ya deberían funcionar juntos, pero no lo hacen, solo debido a algunas diferencias "sin importancia" en la interfaz.

Después de leer todo esto, debo decir que el propósito de

la fachada es simplicidad

adaptador es interoperabilidad .


El adaptador hace que dos interfaces funcionen juntas.

Facade expone una sola clase a un nivel más alto y más limitado. Por ejemplo, una fachada de modelo de vista solo puede exponer ciertas propiedades de solo lectura de una clase de nivel inferior.


El patrón de adaptador permite que dos interfaces previamente incompatibles funcionen entre sí. Tiene 2 interfaces separadas en juego.

El patrón de fachada tiene una interfaz conocida, de bajo nivel / grano fino, y lo envuelve con una interfaz de mayor nivel / nivel de campo. Tiene una interfaz única, que se ha simplificado mediante el ajuste con otro.


Honestamente, muchos patrones podrían implementarse de la misma manera programáticamente: la diferencia está en la intención.

El patrón de diseño del Adaptador está destinado a "traducir" la interfaz de una o más clases en una interfaz que el cliente espera usar: el adaptador traduciría las llamadas a la interfaz esperada en la interfaz real que usan las clases envolventes.

El patrón de Fachada se usa cuando se desea una interfaz más simple (y de nuevo, podría implementarse de la misma manera envolviendo las clases ofensivas). No diría que está utilizando una fachada cuando la interfaz existente es incompatible, justo cuando lo necesita para hacerlo más legible, menos diseñado mal, etc.


La página wiki de Facade Pattern tiene una breve nota sobre esto.

"Se usa un adaptador cuando el envoltorio debe respetar una interfaz particular y debe soportar un comportamiento polimórfico. Por otro lado, se usa una fachada cuando se quiere una interfaz más fácil o más simple para trabajar".

Escuché una analogía de que debería pensar en su control remoto universal que configuró para trabajar con todos sus diferentes sistemas estéreo: presiona "on" y enciende su decodificador de cable, su receptor y su televisor. Tal vez es un cine en casa realmente elegante y atenúa las luces y dibuja las sombras también. Esa es una fachada: un botón / función que se encarga de un conjunto de pasos más complicado.

El patrón de Adaptador simplemente vincula dos interfaces incompatibles.

EDITAR: una analogía rápida para el patrón de Adaptador (basado en los comentarios) podría ser algo así como un adaptador de DVI a VGA. Las tarjetas de video modernas a menudo son DVI, pero tienes un viejo monitor VGA. Con un adaptador que se conecta a la entrada DVI esperada de su tarjeta de video y tiene su propia entrada VGA, podrá hacer que su viejo monitor funcione con su nueva tarjeta de video.


Trataré de explicar esto en palabras sencillas, sin mucha formalidad.

Imagine que tiene algunas clases de dominio y desde la interfaz de usuario desea interactuar con ellas. Una fachada se puede usar para proporcionar funciones que se pueden invocar desde la capa de interfaz de usuario para que la capa de interfaz de usuario no conozca ninguna clase de dominio que no sea la fachada. Esto significa que en lugar de llamar a las funciones en las clases de dominio que llamas una sola función de la fachada, que será responsable de llamar a las funciones necesarias de las otras clases.

Un adaptador, por otro lado, se puede utilizar para integrar otros componentes externos que puedan tener la misma funcionalidad que necesita, pero sus funciones no se llaman del mismo modo. Supongamos que tiene una clase de Car en su dominio y trabaja con un proveedor externo de automóviles que también tiene una clase de automóvil definida. En esta clase, tiene la función car.getDoors() pero el proveedor externo tiene el equivalente car.getNumDoors() . No desea cambiar la forma en que llama a esta función, por lo que puede usar una clase de adaptador para ajustar la clase de Auto externa para que una llamada a getDoors() del adaptador se delegue en getNumDoors() de la clase externa.


Una fachada está diseñada para organizar servicios múltiples detrás de una única puerta de enlace de servicio. Un adaptador está diseñado para proporcionar una forma de utilizar una interfaz conocida para acceder a una desconocida.


Fachada:

journaldev clave: (del artículo de journaldev de Pankaj Kumar)

  1. El patrón de fachada es más como un ayudante para aplicaciones de cliente
  2. El patrón de fachada se puede aplicar en cualquier punto del desarrollo, generalmente cuando el número de interfaces crece y el sistema se vuelve complejo .
  3. Las interfaces de subsistema no conocen Facade y no deberían tener ninguna referencia de la interfaz Facade.
  4. El patrón de fachada debe aplicarse para un tipo similar de interfaces , su propósito es proporcionar una única interfaz en lugar de múltiples interfaces que realizan el mismo tipo de trabajos

Diagrama de clase de fachada

Adaptador:

  1. Es un patrón estructural
  2. Es útil trabajar con dos interfaces incompatibles
  3. Hace que las cosas funcionen una vez que están diseñadas

Diagrama de clase del adaptador:

Puede encontrar más detalles sobre Adapter en esta publicación SE:

Diferencia entre patrón de puente y patrón de adaptador

Diferencias clave:

  1. Facade define una nueva interfaz, mientras que Adapter usa una interfaz antigua . Adapter hace que dos interfaces existentes funcionen juntas en lugar de definir una completamente nueva
  2. Adapter y Facade son ambos envoltorios; pero son diferentes tipos de envoltorios. La intención de Facade es producir una interfaz más simple, y la intención de Adapter es diseñar una interfaz existente

Eche un vistazo al artículo de sourcemaking de sourcemaking también para una mejor comprensión.