¿Cuál es el nombre de este patrón de tipo de fábrica y cómo lo represento en UML?

StackOverflow https://stackoverflow.com/questions/629997

  •  08-07-2019
  •  | 
  •  

Pregunta

Ejemplo: tengo varios tipos, p. Rueda, freno, motor, embrague, AutoBox, ManualBox, ElectricWindow, RearParkingSensor, Asientos con calefacción. Todos ellos heredarán una interfaz de marcador ICarPart (podría ser un atributo (anotación java), pero no importa en esta etapa).

Luego escribo mi clase de automóvil que puede representar todos los tipos de automóviles, por ejemplo,

class Car
{
    string Name;
    DateTime creationDate;
    string ID;

    IList<ICarPart> parts;
}

Luego escribo una fábrica para crear autos. La fábrica podría referirse a algún XML que es una lista de ingredientes para diferentes tipos de automóviles. P.ej. (e ignore el formato, esto es solo para ilustración):

<ExpensiveCar>
  <Name>Expensive Car</Name>
  <Parts>
    <HeatedSeats/>
    <Wheel count=4/>
    <RearParkingSensor/>
    <ElectricWindow type=FrontAndBack/>
  </Parts>
</ExpensiveCar>

La fábrica analizaría esta lista de ingredientes y crearía el objeto del automóvil. Los nuevos tipos de automóviles estarían disponibles para el sistema siempre que las partes se hayan codificado y se haya escrito el XML de la lista de ingredientes.

Preguntas:

  1. ¿Cómo se llama este patrón? ¿O son solo múltiples patrones combinados?
  2. ¿Algo de esto es un antipatrón?
  3. ¿Cómo represento esto en un UML? Podría hacer un diagrama de clase para las partes y para la clase de auto base. ¿Cómo mostraría las instancias de esa clase que se admiten actualmente y las partes que tienen?

Gracias de antemano. Si algo de esto no está claro, comente y enmendaré / udpate / proporcionaré más detalles.

¿Fue útil?

Solución 3

  
      
  1. ¿Cómo se llama este patrón? ¿O son solo múltiples patrones combinados?
  2.   

El patrón descrito es el Constructor Patrón. El patrón de construcción construye objetos complejos a partir de un conjunto de partes más simples. En ocasiones, los objetos creados por el patrón de construcción son Composite Objetos (aunque no necesariamente en el caso de la pregunta).

El patrón de construcción a menudo se demuestra usando listas de ingredientes codificadas, aunque no hay nada en el patrón que lo requiera, ni parece haber un patrón específico documentado que describa la "lista de ingredientes". enfoque.

  
      
  1. ¿Algo de esto es un antipatrón?
  2.   

No

  
      
  1. ¿Cómo represento esto en un UML?
  2.   

Probablemente por:

  1. Defina el diagrama de clase que muestra las partes como clases, así como la clase Car. Muestre que cada clase de pieza implementa la interfaz ICarPart.
  2. Quizás en un diagrama de clase separado (pero vinculado) muestre instancias con nombre de la clase de automóvil utilizando la notación de instancia UML. La representación de clase de instancia le permite especificar los valores que tienen los atributos en esa clase, por ejemplo
------------------------------------------
|ExpensiveCar : Car                      |
------------------------------------------
|parts = {                               |  
|HeatedSeats,                            |
|Wheel (count = 4),                      |
|RearParkingSensor,                      |
|ElectricWindows (type = FrontAndBack) } |
------------------------------------------

Tenga en cuenta que, dado que se trata de una instancia, el texto '' ExpensiveCar: Car '' debe subrayarse, pero SO no me permite hacer esto.

La notación que he usado aquí para inicializar una matriz con partes no es excelente y podría no ser el mejor enfoque. Quizás una alternativa sería agregar una nota UML que contenga el XML real. Lo importante es que un cliente puede ver qué hace que un automóvil sea costoso y también un programador.

Otros consejos

  

¿Cómo se llama este patrón? ¿O se trata simplemente de combinaciones de patrones múltiples?

Tiene el patrón método de fábrica (creación de objetos de automóviles) y una composición antigua (crear un automóvil fuera de la rueda, asiento, etc.). Este último es una variación de la composición.

Creo que este puede ser el Patrón abstracto de fábrica, ya que desea que el conjunto de partes sea compatible entre sí. Probablemente no desee neumáticos para camiones en las ruedas de un automóvil compacto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top