Pergunta

Eu nunca usei fábricas antes para o simples motivo, não entendo quando preciso delas. Eu tenho trabalhado em um pequeno jogo no meu tempo livre e decidi implementar o FMOD para o som. Eu olhei para um invólucro projetado para o Open (configuração de som diferente) e parecia algo como ...

SoundObject* SoundObjectManager* SoundObjectFactory*

O SondObject era basicamente a instância de cada objeto sonoro. O SoundObjectManager apenas gerencia todos esses objetos. Isso é suficientemente direto e faz muito sentido, mas não entendo o que a fábrica está fazendo ou o que é usado. Eu tenho lido nas fábricas, mas ainda não as pego.

Qualquer ajuda seria apreciada!

Foi útil?

Solução

Pense na fábrica como um "construtor virtual". Ele permite construir objetos com um tipo de tempo de compilação comum, mas diferentes tipos de tempo de execução. Você pode alternar o comportamento simplesmente dizendo à fábrica para criar uma instância de um tipo de tempo de execução diferente.

Outras dicas

As fábricas são usadas quando a implementação precisa ser parametrizada. O FMOD é uma plataforma cruzada, ele precisa decidir qual implementação concreta para fornecer a você para sua plataforma. É isso que a fábrica está fazendo. Existem dois padrões principais Padrão de fábrica abstrato e Padrão de método de fábrica.

Situação hipotética: estou escrevendo uma biblioteca de som que quero executar em várias plataformas. Vou tentar tornar o máximo possível do código ser independente da plataforma, mas certamente algumas delas precisarão alterar para o Windows versus OSX versus Linux.

Então, escrevo todas essas implementações diferentes, mas não quero que o usuário final tenha que fazer seus O programa depende de Linux ou Windows ou qualquer outra coisa. Também não quero manter 4 interfaces diferentes na minha API. (Observe que essas são apenas algumas das razões pelas quais você pode criar uma fábrica - certamente existem outras situações).

Então eu defino este bom genérico SoundObject Classe base que define todos os métodos que o cliente pode usar. Então eu faço meu LinuxSoundObject, WindowsSoundObject, e outros 5 derivam de SoundObject. Mas vou ocultar todas essas implementações concretas do usuário e apenas fornecer a eles um SoundObject. Em vez disso, você tem que ligar para o meu SoundObjectFactory Para agarrar o que parece ser um velho e simples SoundObject, mas realmente escolhi o tipo de tempo de execução correto para você e instanciei -o sozinho.

2 anos depois, um novo sistema operacional aparece e desloca o Windows. Em vez de forçá -lo a reescrever seu software, apenas atualizo minha biblioteca para oferecer suporte à nova plataforma e você nunca vê uma alteração na interface.

Tudo isso é bastante artificial, mas espero que você entenda a ideia.

As fábricas isolam os consumidores de uma interface do que o tipo de tempo de execução (IE implementação) está realmente sendo usado.

As fábricas podem ser usadas para implementar a inversão de controle e separar o código de instanciação (os 'novos) da lógica de seus componentes. Isso é útil quando você está escrevendo testes de unidade, pois pode não deseja que objetos testados criem vários outros objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top