¿Cuáles son algunos diseños de clase mínima para el diseño de elevadores para la construcción de m pisos?

Diseño para elevador de un edificio

Escenarios

Un elevador típico tiene botones (botones de elevador) dentro de la cabina para permitir que el usuario que obtuvo el elevador seleccione su piso deseado. De manera similar, cada piso tiene botones (botones de piso) para llamar al elevador para que vaya a los pisos superiores y a los pisos inferiores respectivamente. Los botones se iluminan para indicar que se acepta la solicitud. Además, el botón deja de iluminarse cuando el elevador llega al piso solicitado.

Casos de uso:

Usuario

• Presiona el botón del piso para llamar al ascensor

• Presiona el botón del elevador para moverse al piso deseado

Botón de piso y botón de elevador

• Se ilumina cuando el usuario lo presiona

• Coloca una solicitud de ascensor cuando se presiona

Ascensor

• Se mueve hacia arriba / abajo según las instrucciones

• Abre / cierra la puerta

Diseño

Cada vez que se presiona un botón se genera una solicitud de elevador que debe ser atendida. Cada una de estas solicitudes se rastrea en un lugar centralizado. Las solicitudes de elevador, la clase que almacena, las solicitudes de elevador pueden usar algo diferente para programar las solicitudes de elevador. El elevador es administrado por una clase de controlador, que llamamos Controlador de elevador. La clase de controlador de elevador proporciona instrucciones al elevador. El controlador del elevador lee la siguiente solicitud de elevador para ser procesada y atendida.

El botón es una clase abstracta que define un comportamiento común como illuminate, doNotIlluminate. FloorButton, Elevator Button extiende el tipo de botón y define el método placeRequest () que se invoca cuando se presiona un botón. Cuando se presiona un botón de piso o de ascensor, se agregan solicitudes a una cola común.

ElevatorController lee la siguiente solicitud e indica la siguiente acción al elevador.

¿Cómo podemos extender esto a múltiples ascensores?

En el escenario de elevador único, hay un elevador único y un controlador de elevador y un servidor común donde se almacenan las solicitudes de piso y la solicitud de botón de elevador. Que se procesan según el algoritmo de programación.

Para extender esto a múltiples escenarios de elevadores, todavía habrá un controlador de elevador único. Las solicitudes basadas en el piso pueden ser atendidas por cualquier elevador, mientras que las solicitudes de botones del elevador serán atendidas solo por el elevador al que pertenece el botón.

PlaceRequest () de FloorButton agrega una solicitud a la cola común, a la que accede el controlador del elevador, asignando la solicitud a uno de los elevadores. PlaceReutButton’s placeRequest agrega una solicitud al elevador directamente, ya que se supone que sirve. El controlador del elevador ejecutará varios algoritmos, como la búsqueda más corta, etc., para decidir qué elevador debe manejar cada solicitud.

Los dos tipos de problemas de diseño planteados en las entrevistas son:

  1. La primera familia de problemas de diseño está relacionada con el diseño de sitios web de la vida real. Estos problemas aplican la teoría de la escalabilidad, el equilibrio de carga, la redundancia, etc. Por ejemplo, Diseño de Facebook, Diseño de bits, Diseño de Quora, Diseño de Uber, Diseño de IRCTC, etc.
  2. La segunda familia de problemas de diseño son los diagramas de clase. Por ejemplo, diseño del sistema de elevador, diseño de valet parking, diseño de sistema de restaurante, etc.

Enfoque de 5 pasos para resolver problemas de diseño del sistema:

  1. Generación de casos de uso: reúna todos los casos de uso posibles
  2. Restricciones y análisis: cuántos usuarios, cuántos datos, etc.
  3. Diseño básico: diseño más básico. Pocos usuarios caso.
  4. Cuellos de botella: encuentre los cuellos de botella y resuélvalos.
  5. Escalabilidad: gran cantidad de usuarios. Los pasos 4 y 5 irán en bucle hasta que obtengamos una respuesta satisfactoria.

Resolución de problemas en estructuras de datos y algoritmos ” escrito en varios lenguajes como C, C ++, Java, C #, Python, etc. El libro está escrito para el punto de vista de preparación de entrevistas explicando la lista enlazada, el árbol, el hash, el montón, etc. Número de diagramas para explicar varios conceptos. También contiene un capítulo de Diseño del sistema al final que brindará un enfoque sistemático para resolver los problemas de diseño en una Entrevista.

Algunos problemas que había discutido en el último capítulo son:

  1. ¿Cómo diseñarías Facebook? ¿Cómo diseñarías un poco? etc.
  2. También se discute cómo diseñaría un sistema de ascensor o un sistema de restaurante, etc.

Los enlaces de los libros en Amazon están abajo:

1. Resolución de problemas en estructuras de datos y algoritmos utilizando C

2. Resolución de problemas en estructuras de datos y algoritmos usando C ++

3. Resolución de problemas en estructuras de datos y algoritmos utilizando Java

4. Resolución de problemas en estructuras de datos y algoritmos con C #

5. Resolución de problemas en estructuras de datos y algoritmos usando Python

6. Resolución de problemas en estructuras de datos y algoritmos con Visual Basic .Net

Este es un buen lugar para comenzar: diseño orientado a objetos para elevadores en un apartamento de varios pisos.
Puede agregar sus propias clases a medida que entren nuevos requisitos.

  1. El elevador implementa Runnable
  2. ElevatorController: decide qué elevador atiende la llamada ascendente / descendente
  3. InputRegister / InputReader

Solo se puede hacer con estos … pero es mejor introducir nuevas clases ya que las necesita, no se limite a la cantidad de clases.

More Interesting

¿Cuál es la complejidad de esta recursividad F (1, n)?

¿Cómo podemos implementar el algoritmo de Prim rápidamente en los concursos de programación?

¿Cuáles son las diferencias entre los algoritmos que realizan la búsqueda en un gráfico y los algoritmos que realizan la búsqueda en un árbol?

¿Cómo se implementa una cadena de bloques en el código?

¿Cómo ordenar una matriz de enteros proporcionados como una cadena como entrada desde la línea de comandos, usando lenguaje C?

Programación competitiva: dado un polígono y tres cuadrados congruentes alineados con el eje, ¿puede determinar en tiempo polinómico si el polígono puede cubrirse por completo de manera que los tres cuadrados, que pueden superponerse, cubran una cantidad igual de área en el polígono?

¿Qué patrones iterativos y recursivos se pueden expresar como O (1), O (log2n), O (n) u O (n2) en notación O grande?

¿Por qué las matrices tienen una mejor ubicación de caché que la lista vinculada?

¿Cómo puedo aprender las estructuras de datos en 3 meses?

Cómo hacer que esta declaración se entienda a un chico de 18 años

En el algoritmo de coincidencia del patrón de fuerza bruta cuando todos los caracteres en el patrón son únicos, entonces la fuerza bruta se puede implementar en la complejidad Big-oh (n) donde n es la longitud de la cadena (referencia: introducción a los algoritmos). ¿Alguien puede ayudarme con el algoritmo? Gracias por adelantado

He tenido algunos problemas con la recursividad desde hace un tiempo, desde que comencé a estudiar algoritmos. ¿Hay algún recurso / método en particular que te haya ayudado a entenderlo completamente y que puedas recomendar?

¿Cómo explicará el algoritmo del cuadrado medio en la estructura de datos hash?

¿Cómo funcionan los algoritmos bayesianos para la identificación de spam?

Paso mucho tiempo pensando en el diseño, por lo que la implementación es terriblemente lenta. ¿Cómo supero este problema?