Factory Method – Patrones de diseño

Avatar
3 min lectura

El patrón de diseño Factory Method es una de las técnicas de diseño de software más utilizadas en la actualidad. Consiste en crear una interfaz o una clase abstracta que define los métodos necesarios para crear un objeto, pero deja la implementación de esos métodos en las subclases.

Esto permite a una clase crear objetos sin conocer la clase concreta del objeto que está creando. Esto es muy útil cuando se trabaja con diferentes tipos de objetos que tienen una relación de jerarquía y se desea utilizar una clase para manejarlos de forma genérica.

Por ejemplo, supongamos que tenemos una aplicación que maneja diferentes tipos de vehículos, como coches, motocicletas y bicicletas. En lugar de crear una clase diferente para cada tipo de vehículo, podemos utilizar el patrón Factory Method para crear una interfaz “Vehicle” que define los métodos necesarios para manejar un vehículo. Luego, cada tipo de vehículo puede implementar esa interfaz y crear sus propios objetos.

En Kotlin, podemos implementar el patrón Factory Method de la siguiente manera.

Interfaz que define los métodos necesarios para manejar un vehículo:

interface Vehicle {
    fun startEngine()
    fun stopEngine()
    fun drive()
}

Clase concreta para manejar un coche:

class Car: Vehicle {
    override fun startEngine() {
        println("Starting car engine")
    }

    override fun stopEngine() {
        println("Stopping car engine")
    }

    override fun drive() {
        println("Driving car")
    }
}

Clase concreta para manejar una motocicleta:

class Motorcycle: Vehicle {
    override fun startEngine() {
        println("Starting motorcycle engine")
    }

    override fun stopEngine() {
        println("Stopping motorcycle engine")
    }

    override fun drive() {
        println("Driving motorcycle")
    }
}

Clase que utiliza el patrón Factory Method para crear objetos de tipo Vehicle:

class VehicleFactory {
    fun createVehicle(type: String): Vehicle? {
        when (type) {
            "car" -> return Car()
            "motorcycle" -> return Motorcycle()
            else -> return null
        }
    }
}

Utilización de la clase VehicleFactory:

val factory = VehicleFactory()
val car = factory.createVehicle("car")
car?.startEngine()
car?.drive()
car?.stopEngine()

// El resultado de la ejecución sería:
// Starting car engine
// Driving car
// Stopping car engine

Como se puede ver, la clase VehicleFactory utiliza el patrón Factory Method para crear objetos de tipo Vehicle de acuerdo al tipo especificado en el método createVehicle. Esto permite manejar de forma genérica diferentes tipos de vehículos sin tener que crear una clase diferente para cada uno.

Otro ejemplo de uso del patrón Factory Method es en la creación de objetos de diferentes tipos de cajas de mensajes. Por ejemplo, podemos tener una interfaz MessageBox que define los métodos necesarios para mostrar una caja de mensajes, y luego crear subclases concretas para cajas de mensajes de alerta, información y error. La clase que utiliza el patrón Factory Method puede crear objetos de caja de mensajes de acuerdo al tipo especificado, lo que permite manejar de forma genérica diferentes tipos de cajas de mensajes.

En resumen, el patrón Factory Method es una técnica muy útil en la programación orientada a objetos ya que permite crear objetos de forma genérica sin tener que conocer la clase concreta del objeto. Esto facilita la creación de código modular y reutilizable.

En Kotlin, podemos utilizar el patrón Factory Method mediante la definición de una interfaz o clase abstracta que defina los métodos necesarios para crear un objeto, y luego dejar la implementación de esos métodos en las subclases concretas.