¿Es este un buen diseño: usar una clase abstracta pura para facilitar el uso del método de fábrica

Tengo una GUI compuesta de algunos JPanels. Quiero usar métodos de fábrica para la creación de instancias de JPanels. Aquí un diagrama UML que muestra lo que quiero hacer:

ingrese la descripción de la imagen aquí

En pocas palabras, el método de fábrica necesita usar métodos desde JPanely SimulatorSubscriber, pero si el createPanel()método devuelve a JPanel, SimulatorFactoryno podrá llamar al setSimulator(Simulator)método. Por el contrario, si devuelve a SimulatorSubscriber, no podrá agregar el panel a la interfaz gráfica de usuario que está creando.

Mi primera idea fue usar moldes ........ No necesito elaborar ...

En segundo lugar, pensé en hacer lo que dibujé en el diagrama.

¿Es esta práctica buena / común, y hay alternativas? Quizás mi uso del método de fábrica también está desactivado.

Respuesta 1

Claramente separaría modelo y vista.

Por lo tanto, la fábrica no puede al mismo tiempo crear "elementos de negocio / modelo" como un simulador y elementos de IU como un SimulatorDisplay. Entonces usaría dos fábricas. Uno para elementos empresariales, otro para elementos de interfaz de usuario.

Evitaría usar la herencia para resolver todos los posibles problemas. Así que ya no haga que SimulatorDisplay herede de JPanel. Usaría un campo JPanel en SimulatorDisplay y crearía una interfaz 'HasPanel' con el método getPanel () dentro de él.

No proporcionaría directamente un simulador completo a los suscriptores, sino que usaría un mecanismo de escucha real que proporcione solo el estado público del simulador en lugar del simulador en sí.

En general, no abuses de la clase Abstracts y de la herencia en Java (a excepción de las interfaces). Estás realmente limitado, Java no admite herencia múltiple. Pero incluso si lo ha hecho, la mayoría de las veces, esto no es tan útil.

Respuesta: 2

Tengo un problema al construir mi proyecto con Apache's Ant, que incluye ActionbarSherlock como biblioteca de proyectos. He incluido con éxito la biblioteca usando "android update lib-project --path. --...

En mi MainActivity tengo estas líneas de código: //data.getFirstUserInput()-1 es igual a la entrada del usuario. deck.setCardNumberEmpty (data.getFirstUserInput () - 1); System.out.println ("\ n Tarjetas ...

Intento convertir números al estilo de la moneda europea con Apache POI HSSFDataFormat cf = workbook.createDataFormat (); currencyCellStyle = workbook.createCellStyle (); currencyCellStyle.setDataFormat (...

¿Cuál es la mejor opción para empaquetar y distribuir una aplicación de línea de comandos escrita en Java, dirigida a OS / X y Unix? La opción jar ejecutable parece bastante robusta, y mi distribución no ...