Abstract Factory – Patrones de diseño
Antonio Leiva

El patrón de diseño Abstract Factory es un patrón de diseño de software que se utiliza para proporcionar una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas. Esto se logra mediante la creación de una fábrica abstracta que proporciona una interfaz para crear cada tipo de objeto de la familia, pero deja la implementación concreta de cada objeto a sus subclases.

Por ejemplo, imagina que estás desarrollando un juego de estrategia en el que los jugadores pueden construir diferentes tipos de edificios, como castillos, torres y murallas. En lugar de tener una clase concreta para cada tipo de edificio, podría usar el patrón Abstract Factory para crear una fábrica abstracta de edificios que proporcione una interfaz para crear cada tipo de edificio. Luego, podrías crear subclases concretas de la fábrica abstracta para cada tipo de edificio, como una fábrica de castillos, una fábrica de torres y una fábrica de murallas.

A continuación se muestra un ejemplo de cómo se podría implementar el patrón Abstract Factory en Kotlin:

La interfaz AbstractFactory proporciona una interfaz para crear cada tipo de objeto de la familia

interface AbstractFactory {
    fun createCastle(): Castle
    fun createWall(): Wall
    fun createTower(): Tower
}

Las subclases concretas de AbstractFactory implementan la interfaz para crear objetos concretos:

class CastleFactory: AbstractFactory {
    override fun createCastle(): Castle {
        return Castle()
    }

    override fun createWall(): Wall {
        return CastleWall()
    }

    override fun createTower(): Tower {
        return CastleTower()
    }
}

class WallFactory: AbstractFactory {
    override fun createCastle(): Castle {
        return Wall()
    }

    override fun createWall(): Wall {
        return Wall()
    }

    override fun createTower(): Tower {
        return WallTower()
    }
}

class TowerFactory: AbstractFactory {
    override fun createCastle(): Castle {
        return Tower()
    }

    override fun createWall(): Wall {
        return TowerWall()
    }

    override fun createTower(): Tower {
        return Tower()
    }
}

Las clases concretas representan cada tipo de objeto de la familia:

class Castle {
    // ...
}

class CastleWall: Wall {
    // ...
}

class CastleTower: Tower {
    // ...
}

class Wall {
    // ...
}

class WallTower: Tower {
    // ...
}

class Tower {
    // ...
}

En este ejemplo, la interfaz AbstractFactory proporciona una interfaz para crear cada tipo de objeto de la familia de edificios, como castillos, torres y murallas. Las subclases concretas de AbstractFactory, como CastleFactory, WallFactory y TowerFactory, implementan esta interfaz para crear objetos concretos de cada tipo. Por último, las clases concretas como Castle, CastleWall, CastleTower, Wall, WallTower y Tower representan cada tipo de objeto de la familia de edificios.

El patrón Abstract Factory se utiliza para proporcionar una abstracción en la creación de objetos, lo que permite modificar la implementación concreta de los objetos sin afectar al código que los utiliza. Además, permite crear familias de objetos relacionados que se pueden utilizar juntos sin especificar sus clases concretas, lo que facilita la extensión y el mantenimiento del código.

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 *