El patrón de diseño Factory se usa ampliamente en la programación orientada a objetos. Proporciona una interfaz para crear objetos, pero permite que las subclases decidan qué clases crear instancias. En este artículo, exploraremos cómo implementar el patrón Factory en Golang, comprenderemos sus beneficios y analizaremos un ejemplo práctico de uso inspirado en situaciones cotidianas.
Factory define una interfaz para crear objetos, pero delega la responsabilidad de crear instancias de la clase concreta a las subclases. Esto promueve la creación de objetos de forma desacoplada y flexible, permitiendo que el código sea más modular y más fácil de mantener.
Usemos un ejemplo cotidiano para ilustrar el patrón Factory: un sistema para pedir comida, donde se pueden crear diferentes tipos de comidas (pizza y ensalada).
Primero, necesitamos definir una interfaz que será implementada por todas las "clases concretas" de comidas.
package main type Food interface { Prepare() }
Para hacernos la vida más fácil durante el desarrollo y evitar escribir algo mal durante la validación, una buena práctica es crear un ENUM para tener coherencia y también hacerlo más fácil si queremos agregar nuevos alimentos en el futuro
package main type FoodType int const ( PizzaType FoodType = iota SaladType ) type Food interface { Prepare() }
Y ahora implementemos la interfaz de Alimentos. En el ejemplo solo mostraremos un mensaje, en la vida real aquí es donde se crearía el objeto en el que estamos trabajando
package main type FoodType int const ( PizzaType FoodType = iota SaladType ) type Food interface { Prepare() } type Pizza struct{} func (p Pizza) Prepare() { fmt.Println("Preparing a Pizza...") } type Salad struct{} func (s Salad) Prepare() { fmt.Println("Preparing a Salad...") }
Ahora, creemos la fábrica que decidirá qué clase concreta crear una instancia en función de la enumeración que recibió como parámetro.
package main type FoodFactory struct{} func (f FoodFactory) CreateFood(ft FoodType) Food { switch ft { case PizzaType: return &Pizza{} case SaladType: return &Salad{} default: return nil } }
Finalmente, usaremos la fábrica para crear nuestra comida.
package main func main() { kitchen := FoodFactory{} pizza := kitchen.CreateFood(PizzaType) if pizza != nil { pizza.Prepare() } salad := kitchen.CreateFood(SaladType) if salad != nil { salad.Prepare() } }
Este será el resultado después de ejecutar nuestra aplicación:
Preparing a Pizza... Preparing a Salad...
El patrón de diseño Factory es una herramienta poderosa para promover el desacoplamiento y la flexibilidad en la creación de objetos. En Golang la implementación de este patrón es directa y efectiva, permitiendo la creación de sistemas modulares y de fácil mantenimiento. Usando interfaces y fábricas, podemos centralizar la lógica de creación y simplificar la evolución del código a medida que surgen nuevos requisitos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3