2012-04-16 22 views
5

Tengo una aplicación GUI con muchos controles. La mayoría de ellos tienen eventos y los controles están lógicamente conectados a cada uno allí. Por ejemplo, tengo 5 comboBoxes. Si elijo algo en cb1 y cb3 ellos cb2 debe cambiar una lista de sus valores disponibles. Si elijo algo en cb2 y ch4, ellos cb5 deben cargar su lista de valores disponibles. Todos los artículos que he encontrado en la web dicen que debo usar mediator pattern en este caso. Pero en todos estos artículos, el mediador es algo así como una clase divina, que sabe todo sobre todos los controles y decide qué se debe hacer en caso de algún evento. Si tengo 5-6 controles, todo está bien. ¿Pero y si tengo algo así como 20 o 40 controles? Supongo que la clase de mediador se convertirá en un monstruo en este caso. Será difícil hacer algo con él (modificar o agregar nuevas funcionalidades).¿Qué patrón de diseño usar (necesito algo como patrón de mediador)?

¿Hay algún otro patrón, o buenos ejemplos de mediador pathern, que ayuden a resolver esta situación?

PD: Disculpe si ya hay preguntas sobre este tema, hay tantas preguntas con el mismo nombre, que no es tan fácil encontrar algo que realmente necesito de todos estos temas.

+2

De hecho, 20-40 controles podrían conducir a un Mediador muy complejo. Sin embargo, el Mediador tiene una responsabilidad clara, que es más fácil de entender que difundir la lógica en muchas clases. La * bandera roja * en su pregunta no es el riesgo de clase divina debido a 20-40 controles, sino más bien un diseño de GUI que permite 20-40 controles en primer lugar. – Fuhrmanator

+0

** Fuhrmanator **, tengo una situación con una gran forma de trabajar con algunos negocios s documentos (facturas, contratos, etc.). Entonces, hay muchos campos con los cuales los usuarios deben trabajar. Para los usuarios, es más conveniente trabajar con una pantalla de información. Entonces, si trato de decir algo como "ok, por ahora tendrás 3 \ 5 formularios \ pantallas \ windows. Completa esta información en el primero y esa información en el segundo". los usuarios encontrarán alguna otra compañía de desarrollo, en lugar de cambiar sus hábitos. Y, de todos modos, este tema es para otro tema, supongo :) –

Respuesta

2

Mediator es de hecho la opción correcta aquí, sin embargo, hay una opción alternativa para usar el patrón OBSERVER que le permitirá mantener la lógica por separado. (cb2 observa cb1 y reacciona apropiadamente, cb3-> cb2, etc.).

Con el patrón OBSERVER, tendrá que vincular solo 2 controles a la vez, esto es como una cadena.

0

Mediator pattern - Wiki

Si de Wikipedia pero es simple y hace que sea fácil de entender.

Cuando estudiaba patrones, este código era el mejor. Simple pero eficiente ... Y sí para lo que usted está describiendo que haría uso de un patrón Mediador

0

uso de las diferentes acciones como las estrategias Strategy Pattern e invoco una determinada estrategia de la Mediador, por lo que sólo lo haría Necesita cambiar algunas líneas de código si necesita agregar más controladores mañana.

1

Intente agrupar los componentes que pertenecen juntos en los componentes personalizados (se extiende JComponent o JPanel). Estos componentes personalizados escuchan los eventos de sus hijos y actualizan a los otros niños según sea necesario (-> se convierten en los Mediadores). Los componentes personalizados también pueden activar sus propios eventos personalizados y así informar a su padre Mediador.

0

libro GOF dice:.

"... Patrones Relacionados

Fachada (185) difiere de mediador en la que se abstrae un subsistema de objetos para proporcionar una interfaz más conveniente Su protocolo es unidireccional; que es decir, los objetos de Fachada realizan solicitudes de las clases de subsistema, pero no al revés.Por el contrario, Mediator permite el comportamiento cooperativo que los objetos del colega no pueden o no pueden proporcionar, y el protocolo es multidireccional.

Los colegas pueden comunicarse con el mediador utilizando el patrón Observer (293). ...".

sospecho que una combinación de observador y mediador o bien fachada va a funcionar bien.

recordar que una de las cualidades de los patrones de diseño es que cada vez que se implementa una son diferentes.