Editing Combined Patterns New


Patrón Abstract - Decorator para un sistema de inventario


Date: 6:57pm on Thursday 28th April 2022

Daniel Tsutsumi

Responsive image


            	
            		

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)