Patrones de diseño de Java: Fachada

Estoy tratando de hacer un sistema de pedidos simple, y debido a que es una tarea, es una delimitación que no debería hacer DB y GUI, pero necesito implementar al menos 4 patrones de diseño. Una de mis decisiones fue usar Facade. Hasta donde entiendo, la clase Facade es un tipo de controlador y esto es lo que tengo hasta ahora:

package model;

import java.util.ArrayList;

public class Facade {
ClientsList clients;
OrdersList orders;
ProductsList products;
ArrayList<Orders> orderlist;
public Facade() {
    clients = new ClientsList();
    orderlist=new ArrayList<Orders>();
    orders = new OrdersList(orderlist);
    products = new ProductsList();

}

public int ClientsSize() {

    return clients.size();
}

public int OrdersSize() {

    return orders.size();
}

public void addClients(Clients client) {
    clients.add(client);

}

public void addOrders(Orders order) {
    orders.add(order);
}

public void removeClients() {
    clients.remove();

}

public void removeOrders() {
    orders.remove();

}

public String next() {
    return orders.it();
}
}

Las otras clases en mi paquete modelo son Pedidos, Lista de pedidos, Clientes, Lista de clientes, Productos y Lista de productos y en las clases * Lista tengo la información en ArrayList. Entonces mi pregunta es: ¿es este código una Fachada?

Respuesta 1

Se supone que una fachada me protege de saber sobre ciertas clases y las operaciones que implementan. En su ejemplo, es posible que no necesite saber sobre ClientList, pero sí necesito saber sobre Cliente, Producto y Pedido. Sería mejor si esas clases estuvieran escondidas de mí, así que solo necesito hablar con la fachada.

Respuesta: 2

Escriba una interfaz adicional para que los desarrolladores no tengan que trabajar con la implementación de su fachada:

public interface OrderService {
    //methods your co-developers should be able to use
}

public class Facade implements OrderService {
    //methods your co-developers dont want to know about
}

En su código, use la interfaz y no la impl.

Respuesta: 3

El objetivo de una fachada es proteger la implementación de la funcionalidad en un determinado componente. Una fachada normalmente proporciona una interfaz para 'el mundo exterior'. No sé el resto de su código, pero el ejemplo anterior podría ser una fachada.

Supongamos que está creando un componente que recupera mensajes de las redes sociales. Podría construir una fachada con un método 'GetMessage (palabra clave de cadena)' que (obviamente) devuelve una lista de mensajes, independientemente de la fuente de las redes sociales. Al cliente de este componente no le importa cómo el componente obtiene datos de las redes sociales, solo quiere mensajes. Se pueden ocultar métodos como 'SearchFacebook' o 'SearchTwitter', ya que el cliente no tiene interés en llamar a estos métodos. Sin embargo, 'GetMessages' puede usarlos para buscar en Facebook y Twitter, crear una lista de los resultados de esos dos y devolverla al cliente.

Para otro buen ejemplo, consulte la página wiki: http://en.wikipedia.org/wiki/Facade_pattern

Respuesta: 4

Intención de fachada:

  1. Proporcione una interfaz unificada a un conjunto de interfaces en un subsistema. Facade define una interfaz de nivel superior que hace que el subsistema sea más fácil de usar.

  2. Envuelva un subsistema complicado con una interfaz más simple.

La funcionalidad que está proporcionando coincide con los puntos anteriores, por lo que desde mi punto de vista es una fachada.

En su ejemplo, está exponiendo la funcionalidad del subsistema (OrdersList, ProductsList) a través de Facade.

Respuesta: 5

Quiero usar JRAT profiler para mi programa java simple que es el siguiente: public class MainController {public static int a = 4; public static void main (String [] args) {for (int i = 0; ...

Necesito diseñar un .jar ejecutable que haga dos archivos de texto, quiero que cada vez que haga doble clic en el archivo ejecutable jar, transfiera automáticamente la ruta del archivo a una cadena para que pueda usarlo en mi ...

Versiones tecnológicas: Hibernate 3.6.5 Hibernate Search 3.4.0 Lucene (lucene-core - *. Jar) 3.1.0 Spring 3.1.0.M2 Hibernate (Search) Configuración: <prop key = "hibernate.search.default.indexBase" > / ...

Tengo una entidad llamada Transacción y su tabla relacionada en la base de datos es TAB_TRANSACTIONS. Todo el sistema funciona bastante bien; ahora ha surgido un nuevo requisito en el que el cliente ha exigido ...