He comprobado con el wikipedia article, y parece que falta la versión C++ de un ejemplo de código. No puedo apreciar completamente el patrón de Fachada sin esto, ¿me pueden ayudar a explicarlo usando C++?¿Explicar el patrón de fachada con el ejemplo de C++?
Respuesta
Patrón de fachada: proporciona una interfaz unificada y simplificada para un subsistema o conjunto de interfaces complejo. Proporciona una interfaz de nivel superior que desacopla simultáneamente al cliente del subsistema complejo.
Un ejemplo para ayudarlo a comprender ... un conductor de taxi. Le dice al conductor del taxi 'Llévame a PointX' (interfaz simplificada unificada de alto nivel) que luego comienza una secuencia de acciones (gira la tecla, cambia de marcha, presiona el acelerador, etc.) para realizar la tarea. Él abstrae la complejidad de los subsistemas subyacentes (caja de engranajes, motor, etc.) para que no tenga que preocuparse por ellos. El conductor también lo desacopla del vehículo real utilizado ... no tiene interfaz directa con el automóvil. Podrías darle un Merc pero tu interfaz con el Driver seguiría siendo TakeMeTo (X) ... no estás atada a ningún modelo/marca específico del automóvil.
En un ejemplo del mundo real, encontrará fachadas donde interactúa con bibliotecas o componentes de terceros. No desea que su código dependa de un proveedor específico, por lo que debe introducir una interfaz de fachada para desacoplarse. También simplificará esta interfaz, p. su interfaz de fachada tendría un método llamado SendData (cadena) pero internamente la implementación puede llamar n métodos en m subpaquetes en un orden específico para realizar la tarea. Esto es lo que muestra el diagrama en la página de wikipedia.
p. Ej. Traduciendo an example a C++ y mantenerla pequeña
sResource = LWCPPSimple::get("http://www.perl.org")
Aquí la Biblioteca ficticia Para WWW en C++ es una fachada que unifica aspectos del protocolo, de red y de análisis del problema para que pueda concentrarse en mi objetivo principal de ir a buscar el recurso . El método get oculta/encapsula/mantiene en un lugar la complejidad (y en algunos casos fealdad) de HTTP, FTP y otros protocolos variados, solicitud-respuesta, gestión de conexión, etc. También si mañana los creadores de LWCPPSimple encuentran un forma de hacer que get() sea el doble de rápido, obtengo los beneficios de rendimiento de forma gratuita. Mi código de cliente no tiene que cambiar.
Wow. Me gusta esta explicación Quiero decir, sabía lo que es una fachada, pero esto es simplemente genial. –
contento de que le haya gustado :) – Gishu
Gran Explicación, puede ir bien con este ejemplo de código de respuesta. http://stackoverflow.com/questions/249581/explain-facade-pattern-with-c-example#249995 –
Hice una búsqueda y reemplazo en el ejemplo C#. Esto no le podría ayudar, porque si usted entiende C++, entonces debería ser capaz de entender el C#, ya que utiliza las mismas construcciones y palabras clave (clases, funciones, espacios de nombres, públicos, etc)
// "Subsystem ClassA"
#include <iostream>
class SubSystemOne
{
public:
void MethodOne()
{
std::cout << " SubSystemOne Method" << std::endl;
}
}
// Subsystem ClassB"
class SubSystemTwo
{
public:
void MethodTwo()
{
std::cout << " SubSystemTwo Method" << std::endl;
}
}
// Subsystem ClassC"
class SubSystemThree
{
public:
void MethodThree()
{
std::cout << " SubSystemThree Method" << std::endl;
}
}
// Subsystem ClassD"
class SubSystemFour
{
public:
void MethodFour()
{
std::cout << " SubSystemFour Method" << std::endl;
}
}
// "Facade"
class Facade
{
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four;
public:
Facade()
{
}
void MethodA()
{
std::cout << "\nMethodA() ---- " << std::endl;
one.MethodOne();
two.MethodTwo();
four.MethodFour();
}
void MethodB()
{
std::cout << "\nMethodB() ---- " << std::endl;
two.MethodTwo();
three.MethodThree();
}
}
int Main()
{
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
return 0;
}
En un sentido, una Fachada es solo una API para clientes que desean interactuar con algo oculto.
La Fachada es útil cuando se expone una API simple de C para algo implementado en C++ o simplemente más complejo que la API. O para obtener una barrera fija entre un cliente y una biblioteca cuando la biblioteca necesita pasar por numerosas actualizaciones iterativas y desea afectar al cliente lo menos posible. Por ejemplo, si una biblioteca basada en C necesita actualizarse internamente a C++ o alguna otra cosa, o simplemente cambiarse por algo completamente diferente, entonces la Fachada es una buena capa intermedia para el cliente.
Hay C++ examples para Facade en este excelente sitio en patrones de diseño.
class Engine
{
public:
void Start() { }
};
class Headlights
{
public:
void TurnOn() { }
};
// That's your facade.
class Car
{
private:
Engine engine;
Headlights headlights;
public:
void TurnIgnitionKeyOn()
{
headlights.TurnOn();
engine.Start();
}
};
int Main(int argc, char *argv[])
{
// Consuming facade.
Car car;
car.TurnIgnitionKeyOn();
return 0;
}
class A {
private B b; // Class A uses Class B, the "interface"
public int f() { return b.g(); }
};
class B {
private C c; // class B uses class C, a "subsystem"
private ... ...; // other subsystems can be added
public int g() { c.h(); return c.i(); }
};
class C { // a subsystem
public void h() { ... }
public int i() { return x; }
};
Clase A no utilizará directamente cualquiera de los métodos o afectar directamente el estado de clase C o cualquier otro subsistema que clase B contiene. Aquí solo se muestra un subsistema porque no importa cuántos subsistemas haya.
- 1. Diseño de patrón "Fachada"
- 2. Uso del patrón de fachada
- 3. Explicar el patrón "Líder/Seguidor"
- 4. Ejemplo con el patrón de Visitantes
- 5. Diferencias entre el patrón de fachada y otros patrones
- 6. ¿Cuál es la diferencia entre el patrón de fachada y el patrón de fábrica abstarct?
- 7. Controlador frontal frente a patrón de fachada
- 8. ¿Puedes explicar el Principio de Sustitución de Liskov con un buen ejemplo de C#?
- 9. Por qué usar el patrón de fachada para el bean de sesión EJB
- 10. Pruebas unitarias de métodos privados: patrón de fachada
- 11. ¿Alguien puede explicar el ejemplo de solicitud-respuesta corredor zeromq?
- 12. ¿Puedes explicar el patrón de diseño del contexto?
- 13. Mejor patrón de diseño a utilizar: adaptador o fachada
- 14. Ejemplo de implementación para el patrón de repositorio con Linq a Sql y C#
- 15. Ejemplo de patrón Singleton
- 16. Explicar ejemplo de pitón subproceso módulo
- 17. explicar este patrón de código de juego
- 18. Ejemplo de patrón de especificación
- 19. explicar el objeto de backbone y el patrón de creación de clase
- 20. ¿Alguien puede explicar el espacio de nombres en javascript con un ejemplo?
- 21. ¿Qué patrón se ajusta entre una fachada y un DAO?
- 22. Un ejemplo de patrón de puente
- 23. herramienta para explicar el código C
- 24. patrón de puente en comparación con el patrón de decorador
- 25. C++: dudas sobre el patrón de visitante
- 26. Problema con el ejemplo de libro
- 27. ¿Cuál es el punto de una fachada de explotación maderera?
- 28. ¿Cómo usar el patrón de estrategia con C#?
- 29. Explicar el uso de glOrtho()?
- 30. ¿Diferencias entre el patrón Proxy y el patrón del Adaptador?
¿podría proporcionar el enlace al artículo? –
http://en.wikipedia.org/wiki/Facade_pattern – yesraaj
Editar su pregunta sería más útil para los demás. – tonylo