Factory Method – Patrones de diseño
Antonio Leiva

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.

Quizá también te interese…

Las reglas FIRST de los tests

Las reglas FIRST de los tests

Las reglas FIRST son un conjunto de principios que se utilizan para diseñar y escribir tests de software de manera efectiva. Las siglas FIRST significan: F - Fast: Un test debe ser rápido de ejecutar. I - Independent: Un test debe ser independiente de otros tests y...

¿Qué son los dobles de test?

¿Qué son los dobles de test?

Los dobles de prueba (también conocidos como "doubles" o "fakes") son herramientas comunes en la programación y en particular en el testing de software. Se utilizan para simular el comportamiento de una dependencia de una aplicación en un entorno de pruebas, sin tener...

Kata del TicTacToe en Kotlin

Kata del TicTacToe en Kotlin

Escribe el código para representar una entidad que almacene el tablero de juego del 3 en raya, y que además tenga: Un método move() con 2 parámetros, fila y columna, que permita añadir un movimiento al tablero Un método findWinner(), que devuelva el ganador (X, Y o...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *