Professional Documents
Culture Documents
Aplicabilidad
Una clase no puede prever la clase de objetos que tiene que crear
Una clase quiere que sus subclases decidan qué objetos crean
Las clases delegan responsabilidades a una de entre varias subclases auxiliares, y queremos
localizar en qué subclase concreta se ha delegado
Estructura
Participantes
Product (Documento): define la interfaz de los objetos que crea el método factoría
Colaboraciones
Define una interfaz para crear un objeto, pero dejando en manos de las subclases la decisión de
qué clase concreta instanciar
Consecuencias
Elimina la necesidad de ligar clases específicas de una aplicación al código, que trata con
la interfaz Product y funciona con cualquier clase ConcreteProduct
El cliente debe crear clases hijas de Creator para cada tipo de producto concreto
Las subclases pueden dar una versión extendida del código padre
Código de Ejemplo
Este código permite crear pizzas, entonces dependiendo del tipo de pizza que se solicite al
método crearPizza, este método crear una pizza suprema o una pizza vegetariana.
function PizzaFactory(){
this.crearPizza = function(type){
if (type === "PizzaSuprema") {
return PizzaSuprema();
}else if (type === "PizzaVegetariana"){
return PizzaVegetariana();
};
}
function Pizza(ing,precio){
this.Ingredientes =ing;
this.Precio = precio;
}
function PizzaSuprema(){
return new Pizza(["jamon","queso","salsa","carne"],
150);
}
function PizzaVegetariana(){
return new Pizza(["tomate","queso","salsa"],
150);
}
}
console.log(pizza);
Usos Conocidos
Podemos utilizar este patrón cuando definamos una clase a partir de la que se crearán objetos pero
sin saber de qué tipo son, siendo otras subclases las encargadas de decidirlo.
Patrones Relacionados
El patrón Factory se puede combinar con otros muchos, no obstante es muy frecuente utilizarlo
junto a patrones como Singleton, Builder y Prototype, es decir, para obtener una instancia única
que utilizaremos para construir objetos.
También se le ha relacionado con el patrón Cache Management, utilizado para implementar
cache de objetos.