@startuml iteracion-2

class UniformeSanJuan {
  getBorradorSuperior()
  getBorradorInferior()
  getBorradorCalzado()
}

class UniformeJohnson {
  getBorradorSuperior()
  getBorradorInferior()
  getBorradorCalzado()
}

UniformeSanJuan --|> UniformeFactory
UniformeJohnson --|> UniformeFactory

abstract UniformeFactory {
  crearUniforme()
  {abstract} getBorradorSuperior()
  {abstract} getBorradorInferior()
  {abstract} getBorradorCalzado()
}

UniformeFactory ..> "<<creates>>" Uniforme
UniformeFactory ..> Borrador
UniformeFactory ..> Borrador
UniformeFactory ..> Borrador

class Uniforme {
   superior
   inferior
   calzado
}

Uniforme --> "3" Prenda

class Borrador {
  conTipo(tipo)
  conMaterial(material)
  conTrama(trama)
  conColorPrimario(colorPrimario)
  conColorSecundario(colorSecundario)
  crearPrenda()
}

Borrador ..> "<<creates>>" Prenda

class Prenda {
 colorPrincipal
 colorSecundario
}

Prenda -left-> Tipo
Prenda --> Material
Prenda --> Trama
Prenda --> "2" Color

enum Material {
  ALGODON,
  CUERO,
  LANA,
  JEAN,
  ...
}

enum Trama {
  LISA,
  RAYADA,
  LUNARES,
  CUADROS,
  ESTAMPADO
}

class Color {
}

enum Tipo {
  ANTEOJOS,
  ZAPATOS,
  ...
  esMaterialValido(material)
}

Tipo --> "*" Material
Tipo --> Categoria

enum Categoria {
  CALZADO
  PARTE_SUPERIOR,
  PARTE_INFERIOR,
  ACCESORIO
}

@enduml
