Files
java-design-patterns/localization/es/factory-method/README.md
T
Luis Mateo Hincapié Martinez dc7495e8bd translation: Translated all creational patterns category to Spanish (Task of issue #2277) (#2813)
* Typo corrections

* bridge pattern translated to spanish

* builder pattern translated to spanish

* context-object pattern translated to spanish

* converter pattern translated to spanish

* dependency injection pattern translated to spanish

* factory pattern translated to spanish

* factory-kit pattern translated to spanish

* factory-method pattern translated to spanish

* monostate pattern translated to spanish

* multiton pattern translated to spanish

* object mother pattern translated to spanish

* object pool pattern translated to spanish

* property pattern translated to spanish

* prototype pattern translated to spanish

* registry pattern translated to spanish

* step builder pattern translated to spanish

* value object pattern translated to spanish

* typo corrections and resources urls refactor

* grammar corrections

* Add image to each pattern

---------

Co-authored-by: luismateoh <luismateohm@gmail.com>
Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
2024-03-23 11:53:54 +02:00

4.7 KiB

title, category, language, tag
title category language tag
Factory Method Creational es
Extensibility
Gang of Four

También conocido como

Virtual Constructor

Propósito

Definir una interfaz para crear un objeto, pero dejar que las subclases decidan qué clase instanciar. El método de fábrica permite que una clase difiera la instanciación a las subclases.

Explicación

Ejemplo del mundo real

El herrero fabrica armas. Los elfos requieren armas élficas y los orcos requieren armas orcas. Dependiendo del cliente en cuestión, se convoca al tipo correcto de herrero.

En palabras sencillas

Proporciona una forma de delegar la lógica de instanciación a las clases hijas.

Wikipedia dice

En la programación basada en clases, el patrón de método de fábrica es un patrón de creación que utiliza métodos de fábrica para lidiar con el problema de crear objetos sin tener que especificar la clase exacta del objeto que se creará. Esto se hace creando objetos llamando a un método de fábrica — ya sea especificado en una interfaz e implementado por clases hijas, o implementado en una clase base y opcionalmente sobrescrito por clases derivadas — en lugar de llamar a un constructor.

Ejemplo programático

Tomando nuestro ejemplo del herrero. En primer lugar, tenemos una interfaz Blacksmith y algunas implementaciones para ello:

public interface Blacksmith {
  Weapon manufactureWeapon(WeaponType weaponType);
}

public class ElfBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return ELFARSENAL.get(weaponType);
  }
}

public class OrcBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return ORCARSENAL.get(weaponType);
  }
}

Cuando llegan los clientes, se llama al herrero adecuado y se fabrican las armas solicitadas:

Blacksmith blacksmith = new OrcBlacksmith();
Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR);
LOGGER.info("{} manufactured {}", blacksmith, weapon);
weapon = blacksmith.manufactureWeapon(WeaponType.AXE);
LOGGER.info("{} manufactured {}", blacksmith, weapon);

blacksmith = new ElfBlacksmith();
weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR);
LOGGER.info("{} manufactured {}", blacksmith, weapon);
weapon = blacksmith.manufactureWeapon(WeaponType.AXE);
LOGGER.info("{} manufactured {}", blacksmith, weapon);

Salida del programa:

The orc blacksmith manufactured an orcish spear
The orc blacksmith manufactured an orcish axe
The elf blacksmith manufactured an elven spear
The elf blacksmith manufactured an elven axe

Diagrama de clases

alt text

Aplicabilidad

Utilice el patrón Método de Fábrica cuando:

  • La clase no puede anticipar la clase de objetos que debe crear.
  • La clase quiere que sus subclases especifiquen los objetos que crea.
  • Las clases delegan la responsabilidad a una de varias subclases ayudantes, y desea localizar el conocimiento de qué subclase ayudante es el delegado. conocimiento de qué subclase ayudante es el delegado.

Usos conocidos

Créditos