2010-07-12 22 views
6

No puedo decidir qué patrón se adapta mejor al siguiente problema.Mejor patrón de diseño a utilizar: adaptador o fachada

Tengo un sistema de cliente que interactuará con un subsistema separado. El subsistema es bastante complicado, por lo que necesito una interfaz entre los dos para simplificar el sistema del cliente. Esto suena como un ajuste perfecto para el patrón de fachada, pero creo que el patrón de adaptador también se ajusta a mi problema.

¿Hay alguna diferencia si la interfaz en el medio llama a tareas individuales en el subsistema a través de llamadas API simples?

Respuesta

9

Según su descripción, está más en línea con la definición aceptada de Fachada, pero diría que es más un debate semántico que otra cosa. Fachada en general reduce más la complejidad de la interfaz con todo un subsistema, mientras que el adaptador está más orientado a ajustar una interfaz existente o llamar a sus necesidades específicas (por ejemplo, la funcionalidad básica está ahí pero los tipos de devolución no son exactamente lo que usted desea; etc.)

6

Esto claramente parece ser un caso de patrón de fachada, su objetivo es la simplificación en lugar de una adaptación real.

Fachada Definición:

proporcionar una interfaz unificada para un conjunto de interfaces en un subsistema. Fachada define una interfaz de nivel superior que hace que el subsistema sea más fácil de usar.

adaptador Definición:

convertir el interfaz de una clase en otra interfaz clientes esperan. El adaptador permite que las clases funcionen juntas que no podrían hacerlo de otra forma debido a interfaces incompatibles.

Definiciones levantado de: http://dofactory.com/Patterns/Patterns.aspx

0

La diferencia entre la fachada y el adaptador es sobre todo la intención.

Si lo que quieres hacer es simplificar la interfaz, entonces estás viendo una fachada. Si desea Adaptar la interfaz para que pueda ser utilizada como algo más, entonces es un Adaptador.

Pero realmente, ¿cuál es el problema de cómo lo llamas? Mi regla de oro es que si está implementando una interfaz existente, probablemente esté utilizando la interfaz del Adaptador. Si está creando una nueva interfaz simplificada, es una Fachada.

5

El adaptador se utiliza cuando desea adaptar la interfaz de una clase existente a otra interfaz con la que el cliente espera trabajar. Por lo general, solo implica la delegación o la traducción de un método de una interfaz al método correspondiente de la otra.

Fachada se utiliza cuando desea simplificar un sistema complejo mediante la exposición de un conjunto más simple de API con las que un cliente puede trabajar. Implica traducir un patrón complejo de llamadas API en una única llamada API.

Su caso parece más como que necesita una fachada que un adaptador. Implementar solo el patrón de adaptador no le dará el beneficio de la simplificación de API. Al final, no importa cómo lo llames. Y estos patrones no son exclusivos. Podría mezclar ambos de una manera que le brinde el mayor beneficio.

-3

La fachada se ocupa de la interfaz, no de la implementación. Su propósito es ocultar la complejidad interna detrás de una única interfaz que parece simple en el exterior.

0

Facade patrón (Un objeto que proporciona una interfaz simplificada a un cuerpo más grande de código) se ajusta para su caso de uso.

Lista de verificación para utilizar la fachada: (Del artículo de Wikipedia relacionado)

  1. Se requiere una interfaz sencilla para acceder a un sistema complejo.
  2. Las abstracciones e implementaciones de un subsistema están estrechamente relacionadas.
  3. Necesita un punto de entrada para cada nivel de software en capas.
  4. El sistema es muy complejo o difícil de entender.

Pregunta relacionada SE para obtener más detalles sobre Fachada.

What is Facade Design Pattern?

A pesar de que tanto la fachada y adaptador son patrones estructurales, la intención es diferente (respuesta samitgaur explicó la parte intención muy bien).

Dado que no está convirtiendo una interfaz a otra interfaz, Adapter no cumple su propósito. pregunta

SE relacionadas:

What is the difference between the Facade and Adapter Pattern?

Cuestiones relacionadas