El patrón Factory Method es un patrón de diseño creacional que proporciona una interfaz para crear objetos en una superclase, pero permite a las subclases alterar el tipo de objetos que se crearán. En otras palabras, el patrón Factory Method encapsula la creación de objetos en una clase separada para que las subclases puedan cambiar la clase de objetos que se crean.
* Para ello primero, definimos una interfaz para nuestro Factory Method.
* A continuación, implementamos esta interfaz con una clase concreta 'DogFactory' que crea objetos de tipo 'Dog'
* Luego, podemos crear una subclase 'CatFactory' que crea objetos de tipo 'Cat'
* Finalmente, podemos utilizar estas clases para crear objetos de tipo 'Dog' y 'Cat' sin preocuparnos por la implementación detallada de su creación:
public interface IAnimalFactory
{
IAnimal CreateAnimal();
}
public class DogFactory : IAnimalFactory
{
public IAnimal CreateAnimal()
{
return new Dog();
}
}
public class CatFactory : IAnimalFactory
{
public IAnimal CreateAnimal()
{
return new Cat();
}
}
IAnimalFactory factory = new DogFactory();
IAnimal dog = factory.CreateAnimal();
factory = new CatFactory();
IAnimal cat = factory.CreateAnimal();
De esta manera, podemos cambiar fácilmente el tipo de objeto que creamos simplemente cambiando la instancia de la fábrica que utilizamos, sin tener que modificar el código que crea el objeto en sí.
Otro uso que le suelo dar
Desde mi punto de vista, también podríamos utilizar un fábrica para que, dependiendo de alguna varialbe, nos devuelva la interfaz IAnimal dependiendo si es un Dog o un Cat, pero quien saque el tipo de interfaz a utilizar es la clase que nos va a devilver el interfaz dependiendo de los parámetro que le estemos pasando.
public enum Animal
{ Dog, Cat }
public class AnimalFactory : IAnimalFactory
{
public IAnimal CreateAnimal(Animal animal)
{
IAnimal result;
switch (animal)
{
case Dog:
result = new Dog();
break;
case Cat:
result = new Cat();
break;
}
return result;
}
}
Y eso es todo por hoy. Este patrón es muy fácil de entender e implementar.
Happy Coding.