Els patrons creacionals són un tipus de patrons de disseny que se centren en el procés de creació d'objectes. Aquests patrons proporcionen mecanismes per crear objectes de manera que es pugui controlar millor el procés de creació, evitant problemes com la creació directa d'objectes que poden portar a un codi menys flexible i més difícil de mantenir.

Objectius dels Patrons Creacionals

Els patrons creacionals tenen diversos objectius clau:

  1. Encapsulació de la Creació d'Objectes: Permeten encapsular la lògica de creació d'objectes, separant-la del codi que utilitza aquests objectes.
  2. Flexibilitat i Reutilització: Faciliten la creació d'objectes de manera flexible i reutilitzable, permetent canviar la manera com es creen els objectes sense afectar el codi que els utilitza.
  3. Reducció de la Complexitat: Redueixen la complexitat del codi, ja que la lògica de creació d'objectes es centralitza en un lloc específic.
  4. Control sobre el Procés de Creació: Proporcionen un control més gran sobre el procés de creació d'objectes, permetent aplicar patrons com el Singleton o el Prototype per assegurar que els objectes es creen de manera controlada.

Tipus de Patrons Creacionals

Hi ha diversos patrons creacionals, cadascun amb les seves pròpies característiques i usos específics. A continuació es presenten els més comuns:

  1. Singleton: Garanteix que una classe només tingui una instància i proporciona un punt d'accés global a aquesta instància.
  2. Factory Method: Defineix una interfície per crear un objecte, però permet que les subclasses decideixin quin tipus d'objecte crear.
  3. Abstract Factory: Proporciona una interfície per crear famílies d'objectes relacionats o dependents sense especificar les seves classes concretes.
  4. Builder: Separa la construcció d'un objecte complex de la seva representació, permetent crear diferents representacions amb el mateix procés de construcció.
  5. Prototype: Permet crear nous objectes copiant una instància existent, coneguda com a prototip.

Comparació dels Patrons Creacionals

A continuació es presenta una taula comparativa dels diferents patrons creacionals:

Patró Propòsit Exemple d'Ús
Singleton Garanteix una única instància d'una classe i proporciona un punt d'accés global. Gestió de configuracions globals, connexions a bases de dades.
Factory Method Defineix una interfície per crear objectes, permetent a les subclasses decidir la seva creació. Creació de diferents tipus de documents en una aplicació d'oficina.
Abstract Factory Proporciona una interfície per crear famílies d'objectes relacionats. Creació de components d'interfície d'usuari per a diferents sistemes operatius.
Builder Separa la construcció d'un objecte complex de la seva representació. Construcció d'objectes complexos com cases, vehicles, etc.
Prototype Permet crear nous objectes copiant una instància existent. Creació de nous objectes a partir d'un objecte prototip, com en jocs de rol.

Exemples Pràctics

Singleton

public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // Constructor privat per evitar la creació d'instàncies externes
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

Factory Method

public abstract class Product {
    // Mètodes del producte
}

public class ConcreteProductA extends Product {
    // Implementació del producte A
}

public class ConcreteProductB extends Product {
    // Implementació del producte B
}

public abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        // Utilitzar el producte
    }
}

public class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}

Exercici Pràctic

Exercici

Implementa un patró Singleton per a una classe DatabaseConnection que garanteixi que només hi hagi una connexió a la base de dades en tota l'aplicació.

Solució

public class DatabaseConnection {
    private static DatabaseConnection instance;

    private DatabaseConnection() {
        // Constructor privat per evitar la creació d'instàncies externes
    }

    public static DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public void connect() {
        // Lògica de connexió a la base de dades
    }

    public void disconnect() {
        // Lògica de desconnexió de la base de dades
    }
}

Resum

Els patrons creacionals són essencials per gestionar la creació d'objectes de manera eficient i flexible. Hem vist els objectius principals d'aquests patrons, els tipus més comuns i alguns exemples pràctics. En els següents temes, explorarem cada un d'aquests patrons en detall, començant pel patró Singleton.

© Copyright 2024. Tots els drets reservats