Pregunta

Nunca he utilizado antes de fábricas por la sencilla razón, no entiendo cuando los necesito. He estado trabajando en un pequeño juego en mi tiempo libre y decidí poner en práctica FMOD para el sonido. Miré a un contenedor diseñado para OpenAL (configuración del sonido diferente) y se veía algo así como ...

* SoundObject SoundObjectManager * SoundObjectFactory *

El SoundObject era básicamente la instancia de cada objeto de sonido. El SoundObjectManager simplemente gestiona todos estos objetos. Esto es bastante sencillo y hace un montón de sentido, pero no consigo lo que la fábrica está haciendo o qué se utiliza. He estado leyendo sobre Factorys pero todavía realmente no conseguirlos.

Cualquier ayuda se agradece!

¿Fue útil?

Solución

Piense en fábrica como un "constructor virtual". Se le permite construir objetos con un tipo de tiempo de compilación común, pero diferentes tipos de tiempo de ejecución. Puede cambiar el comportamiento simplemente diciendo la fábrica para crear una instancia de un tipo de ejecución diferente.

Otros consejos

Las fábricas se utilizan cuando la aplicación necesita ser parametrizado. FMOD es multiplataforma, tiene que decidir qué aplicación concreta para darle a su plataforma. Eso es lo que la fábrica está haciendo. Hay dos patrones principales patrón Abstract Factory y Método de fábrica Pattern .

hipotética situación: Estoy escribiendo una biblioteca de sonidos que quiero ejecutarse en múltiples plataformas. Voy a tratar de hacer la mayor cantidad de la plataforma de código como sea posible ser independiente, pero sin duda alguna de que tendrá que cambiar para Windows frente a frente OSX Linux.

Así que escribo todas estas diferentes implementaciones, pero no quiero que el usuario final tiene que hacer su programa dependen de Linux o Windows o lo que sea. Asimismo, no quiero mantener 4 interfaces diferentes a mi API. (Nota que estos son sólo algunas de las razones por las que podría crear una fábrica - sin duda hay otras situaciones).

Así defino este bonito clase base SoundObject genérica que define todos los métodos que el cliente obtiene de usar. Entonces hago mi LinuxSoundObject, WindowsSoundObject, y 5 otros derivan de SoundObject. Pero voy a ocultar todas estas implementaciones concretas por parte del usuario y sólo proporcionarles un SoundObject. En su lugar, usted tiene que llamar a mi SoundObjectFactory para agarrar lo que parece que ser un SoundObject viejo y simple, pero realmente me ha elegido el tipo de ejecución correcta para que haya instanciado a mí mismo.

2 años más tarde, un nuevo sistema operativo se produce y desplaza de Windows. En lugar de forzar a que reescribir su software, acabo de actualizar mi biblioteca para apoyar la nueva plataforma y que nunca se ve un cambio en la interfaz.

Todo esto es bastante artificial, pero con suerte se entiende la idea.

Las fábricas aislar los consumidores de una interfaz de qué tipo de tiempo de ejecución (es decir, la aplicación) se está utilizando realmente.

Las fábricas pueden utilizarse para aplicar la inversión de control, y para separar el código de instancias (los 'nuevos' s) a partir de la lógica de sus componentes. Esto es útil cuando se está escribiendo pruebas de unidad ya que puede no querer objetos probado para crear un montón de otros objetos.

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