Qual é o nome deste tipo de padrão de fábrica e como faço para representá-lo em UML?

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Exemplo: I têm vários tipos, v.g. Roda, freio, motor, embreagem, Autobox, ManualBox, ElectricWindow, RearParkingSensor, HeatedSeats. Estes serão todos herdar uma ICarPart marcador de interface (poderia ser um atributo (java anotação), mas não importa nesta fase).

Eu, então, escrever a minha classe de carros que podem representar todos os tipos de carros, por exemplo.

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

    IList<ICarPart> parts;
}

Eu, então, escrever uma fábrica para criar carros. A fábrica poderia se referir a alguns XML que é uma lista de ingredientes para diferentes tipos de carro. Por exemplo. (E por favor ignore formato, isto é apenas para ilustração):

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

A fábrica iria analisar esta lista de ingredientes e criar o objeto carro. Novos tipos de carro estaria disponível para o sistema fornecendo as peças haviam sido codificados e a lista de ingredientes XML escrito.

Perguntas:

  1. O que é esse padrão chamado? Ou é apenas múltiplos padrões combinados?
  2. é nada disso uma antipattern?
  3. Como faço para representar isso em um UML? Eu poderia fazer um diagrama de classes para as partes e para a classe de carro base. Como eu iria mostrar as instâncias dessa classe que são suportadas atualmente e as partes que têm?

Obrigado antecipadamente. Se nada disso está claro comentário, por favor e eu vou alterar / udpate / fornecer mais detalhes.

Foi útil?

Solução 3

  1. O que é esse padrão chamado? Ou é apenas múltiplos padrões combinados?

O padrão descrito é o Builder Padrão. O padrão construtor constrói objetos complexos a partir de um conjunto de partes mais simples. Às vezes os objetos construídos pelo padrão do construtor são Composite objetos (embora não neccessarily no caso da pergunta).

O padrão do construtor é muitas vezes demonstrada usando listas de ingredientes codificados, embora não há nada no padrão que exige isso, nem parece haver um padrão específico documentados descrevendo a abordagem "ingredientes lista".

  1. é nada disso uma antipattern?

Não

  1. Como faço para representar isso em um UML?

Provavelmente por:

  1. Definir o diagrama de classes mostrando as partes como classes, bem como a classe Car. Mostram que cada classe implementa parte da interface ICarPart.
  2. Talvez em um independentes (mas ligados) diagrama de classes mostra instâncias nomeadas da classe carro usando a notação UML exemplo. A representação de classe instância permite que você especifique os valores que os atributos têm nessa classe, por exemplo.
------------------------------------------
|ExpensiveCar : Car                      |
------------------------------------------
|parts = {                               |  
|HeatedSeats,                            |
|Wheel (count = 4),                      |
|RearParkingSensor,                      |
|ElectricWindows (type = FrontAndBack) } |
------------------------------------------

Note que, porque esta é uma instância do texto. "ExpensiveCar: Car" deve ser sublinhado mas fá-lo não me permite fazer isso

A notação eu usei aqui para inicializar um array com partes não é grande e pode não ser a melhor abordagem. Talvez uma alternativa seria adicionar uma nota UML que contém o XML real. O importante é que um cliente pode ver o que faz um carro caro e por isso pode um programador.

Outras dicas

O que é esse padrão chamado? Ou é apenas combina vários padrões?

Você tem a href="http://en.wikipedia.org/wiki/Factory_method_pattern#C.2B.2B" rel="nofollow noreferrer"> padrão Factory Method

Eu penso que este pode ser o padrão Abstract Factory, como você deseja que o conjunto de peças para ser compatível com o outro. Você provavelmente não quer pneus de caminhão sobre rodas de um carro compacto.

scroll top