¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Patrones de diseño en C#
  3. El patrón Factory Method
Extrait - Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición]
Extractos del libro
Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición] Volver a la página de compra del libro

El patrón Factory Method

Descripción

El objetivo del patrón Factory Method es proveer un método abstracto de creación de un objeto delegando en las subclases concretas su creación efectiva.

Ejemplo

Vamos a centrarnos en los clientes y sus pedidos. La clase Cliente implementa el método creaPedido que debe crear el pedido. Ciertos clientes solicitan un vehículo pagando al contado y otros clientes utilizan un crédito. En función de la naturaleza del cliente, el método creaPedido debe crear una instancia de la clase PedidoContado o una instancia de la clase PedidoCrédito. Para realizar estas alternativas, el método creaPedido es abstracto. Ambos tipos de cliente se distinguen mediante dos subclases concretas de la clase abstracta Cliente:

  • La clase concreta ClienteContado cuyo método creaPedido crea una instancia de la clase PedidoContado.

  • La clase concreta ClienteCrédito cuyo método creaPedido crea una instancia de la clase PedidoCrédito.

Tal diseño está basado en el patrón Factory Method, el método creaPedido es el método de fabricación. El ejemplo se detalla en la figura 2-4.1.

images/figure36.PNG

Figura 2-4.1 - El patrón Factory Method aplicado a los clientes y sus pedidos

Estructura

1. Diagrama de clases

La figura 2-4.2 detalla la estructura genérica del patrón.

images/figure37.PNG

Figura 2-4.2 - Estructura del patrón Factory Method

2. Participantes

Los participantes del patrón son los siguientes:

  • CreadorAbstracto (Cliente) es una clase abstracta que implementa la firma del método de fabricación y los métodos que invocan al método de fabricación.

  • CreadorConcreto (ClienteContado, ClienteCrédito) es una clase concreta que implementa el método de fabricación. Pueden existir varios creadores concretos.

  • Producto (Pedido) es una clase abstracta que describe las propiedades comunes de los productos.

  • ProductoConcreto (PedidoContado, PedidoCrédito) es una clase concreta que describe completamente un producto.

3. Colaboraciones

Los métodos concretos de la clase CreadorAbstracto se basan en la implementación del método de fabricación en las subclases. Esta implementación crea una instancia de la subclase adecuada de Producto.

Dominios de uso

El patrón se utiliza en los casos siguientes:

  • una clase que sólo conoce los objetos con los que tiene relaciones;

  • una clase quiere transmitir a sus subclases las elecciones de instanciación aprovechando un mecanismo de polimorfismo.

Ejemplo en C#

El código fuente de la clase abstracta Pedido y de sus dos subclases concretas aparece a continuación. El importe del pedido se pasa como parámetro al constructor de la clase. Si la validación de un pedido al contado es sistemática, tenemos la posibilidad de escoger, para nuestro ejemplo, aceptar únicamente aquellos pedidos provistos de un crédito cuyo valor se sitúe entre 1.000 y 5.000.

using System; 
 
public abstract class Pedido 
{ 
    protected double importe; 
 
    public Pedido(double importe) 
    { 
        this.importe = importe; 
    } 
 
    public abstract bool valida(); 
 
    public abstract void paga(); 
} 
 
 
using System; 
 
public class PedidoContado : Pedido 
{ 
    public PedidoContado(double importe) : base(importe) { } 
 
    public override void paga() 
    { 
        Console.WriteLine( 
          "El pago del pedido por importe de: " + 
          importe...