Daniel Tsutsumi
class ProductoAbstracto(ABC):
"""
Interfaz producto
"""
_nombre: str
_precio: float
@abstractmethod
def set_nombre(self, nombre: str):
pass
@abstractmethod
def set_precio(self, precio: float):
pass
class ProductoDefault(ProductoAbstracto):
"""
Producto concreto por defecto
"""
def set_nombre(self, nombre: str):
self._nombre = nombre
def set_precio(self, precio: float):
self._precio = precio
class ProductoPerecedero(ProductoAbstracto):
"""
Producto concreto perecedero
"""
_caducidad: datetime
def __init__(self, fecha_expiracion: datetime):
self._caducidad = fecha_expiracion
def set_nombre(self, nombre: str):
self._nombre = nombre
def set_precio(self, precio: float):
self._precio = precio
def set_caducidad(self, fecha: datetime):
self._caducidad = fecha
class ProductoNoPerecedero(ProductoAbstracto):
"""
Producto concreto no perecedero
"""
def set_nombre(self, nombre: str):
self._nombre = nombre
def set_precio(self, precio: float):
self._precio = precio
class FabricaAbstracta(ABC):
"""
Fábrica abstracta de productos default
"""
@abstractmethod
def crear_producto(self) -> ProductoAbstracto:
pass
class FabricaProducto(FabricaAbstracta):
"""
Fábrica concreta de productos
"""
def crear_producto(self) -> ProductoAbstracto:
return ProductoDefault()
class FabricaDecorador(FabricaAbstracta):
"""
Decorator de fábrica abstracta de productos
"""
@abstractmethod
def crear_producto(self) -> ProductoAbstracto:
pass
class DecoradorNoPerecedero(FabricaDecorador):
"""
Fábrica concreta de productos no perecederos
"""
def crear_producto(self) -> ProductoAbstracto:
return ProductoNoPerecedero()
class DecoradorPerecedero(FabricaDecorador):
"""
Fábrica concreta de productos perecederos
"""
def crear_producto(self) -> ProductoAbstracto:
return ProductoPerecedero(datetime.utcnow())
Abstract Factory es un patrón de diseño creacional que nos permite producir familias de objetos relacionados sin especificar sus clases concretas. Su implementación nos provee de una interfaz (FabricaAbstracta) cuyo fin es establecer los métodos que las fábricas concretas (FabricaProducto y FabricaDecorador) deben implementar para crear el objeto. Así mismo, el patrón Decorator nos permite agregar cualidades y funcionalidades a los objetos (productos) que es posible crear mediante las distintas fábricas concretas.
Comments (0)