Como ejercicio de aprendizaje (no estoy en la escuela, solo soy un viejo tratando de aprender algo nuevo), estoy tratando de escribir una simulación de puerta lógica que incorpore el retraso de propagación. El usuario también debe poder agrupar puertas para crear objetos de nivel superior.
Quiero aplicar patrones de diseño a mi problema, pero estoy teniendo dificultades.
Estoy leyendo los patrones de diseño de Head First , y veo que el patrón de comandos es una buena forma de simular impulsos eléctricos a través de un circuito con un retraso. También veo que el patrón compuesto es una buena forma de simular unidades anidadas. Simplemente no sé cómo mezclar los dos.
En otras palabras, cuando paso por mis puertas, veo que la puerta 'x' debería dispararse. Tiene un retraso de 15 nanosegundos, por lo que creo un comando con una marca de tiempo de 15 ns del tiempo de juego actual. ¿Dónde está el despachador? En el ejemplo del comensal, siendo el comando la 'Orden', la camarera y el cocinero envían el comando y tienen la opción de introducir un retraso. Si tengo una puerta 'compuesta', ¿también tiene su propio despachador? ¿Necesito usar un Singleton para administrar la cola?
Leí lo que pude encontrar, pero todavía necesito un empujón en la dirección correcta:
fuente
Respuestas:
Es posible que desee ver un ejemplo de Programación en Scala , ya que tienen un simulador que hace lo que intenta hacer en Java:
http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6
Al observar su enfoque, puede encontrar cómo cambiar su programa para obtener el comportamiento que desea.
Mencionó que no puede agregarlo fácilmente, entonces, ¿por qué no explicar cuál es su enfoque y cuál es la dificultad que encuentra? Para que las personas puedan darle algunas sugerencias que quizás no haya considerado.
Como se mencionó, los patrones de diseño son formas de hablar sobre lo que está haciendo su código, como una abreviatura, pero la idea de intentar forzar patrones de diseño simplemente parece una mala idea.
Básicamente, un retraso de propagación no debería ser difícil.
Puede tener una clase base que es
Gate
, y en ella poner en un retraso.Todas las puertas se extienden desde esto y establecen el retraso real.
Ahora, cuando está siguiendo una señal, cuando está en una puerta, ese hilo puede dormir durante el retraso simulado, pero esto también significa que necesita asignar el tiempo real a su tiempo simulado, ya que su simulador será más lento que un sistema real sería.
Si encuentra que tiene demasiados subprocesos, simplemente colóquelos en una lista ordenada, por el siguiente en la parte superior, y cuando haga una pausa, simplemente coloque el tiempo en que se realiza el retraso y en cada bucle el simulador seleccionará los que ya están listos , realice la siguiente acción y luego se produce el siguiente retraso.
Esto sería similar a un bucle de juego.
fuente
Entonces no estás usando el patrón de comando.
Querido dios no. El punto completo del patrón compuesto es que puede suministrar un objeto compuesto a una ubicación que solo espera un objeto. Esto le permite componer el comportamiento de una manera sensata.
Diablos no. ¿Solo tienes una cocinera y una camarera en todo el mundo? ¿Solo tienen una cocina?
Mezclar el comando y el patrón compuesto es bastante sencillo. Tienes alguna interfaz que representa un comando. Cada comando concreto puede anular (o de otro modo satisfacerlo en lenguajes que no son de herencia) esa interfaz para proporcionar algún comportamiento. Su retraso es uno de esos comportamientos simples.
El patrón compuesto proporciona dos (o más) objetos / comportamientos detrás de una sola interfaz. El uso más simple para este ejemplo sería un comando compuesto que toma otros dos comandos y luego, cuando se le dice que se ejecute, dispara los dos comandos almacenados. De esta manera, puede tomar su comando de 'retraso' aislado y cualquier otro comando arbitrario para crear un comando retrasado.
fuente