Factory Method
Crea objetos de una misma familia usando polimorfismo. Permite abstraernos de como fue creado el objeto, generalmente cuando es difícil de construir, no sabemos explícitamente cuál es la clase a instanciar, o por último no es necesario saber cuál es la clase a instanciar.
En el ejemplo se asume que la aplicación le permite al usuario pagar con efectivo o con tarjeta de crédito. Se crean dos clases de tipo pago, cada una con un comportamiento diferente, se utiliza un factory para obtener la clase correcta según sea el caso.
Ejemplo de uso:
Payment payment = PaymentFactory.createPayment(PaymentType.CASH);
payment.doPayment(1000.50); // Salida: Paid with cash: 1000.50
El patrón generalmente es usado como un método estático. Es muy útil para crear objetos rápidamente, o para crear objetos con distintos comportamientos pero en la misma familia.