```mermaid classDiagram class DaoFactory { -usuario_dao UsuarioDao -pelicula_dao PeliculaDao -emocion_dao EmocionDao -historial_dao HistorialDao -ciclo_dao CicloDao +obtener_usuario_dao() UsuarioDao +obtener_pelicula_dao() PeliculaDao +obtener_emocion_dao() EmocionDao +obtener_historial_dao() HistorialDao +obtener_ciclo_dao() CicloDao } class UsuarioDao { -bd ConexionBD +obtener_conexion() Connection } class PeliculaDao { -bd ConexionBD +obtener_conexion() Connection } class EmocionDao { -bd ConexionBD +obtener_conexion() Connection } class HistorialDao { -bd ConexionBD +obtener_conexion() Connection } class CicloDao { -bd ConexionBD +obtener_conexion() Connection } DaoFactory --> UsuarioDao : crea/devuelve DaoFactory --> PeliculaDao : crea/devuelve DaoFactory --> EmocionDao : crea/devuelve DaoFactory --> HistorialDao : crea/devuelve DaoFactory --> CicloDao : crea/devuelve ``` ### Implementar DaoFactory ```python class DaoFactory: _daos = {} @staticmethod def obtener_usuario_dao() -> UsuarioDao: if 'usuario' not in DaoFactory._daos: DaoFactory._daos['usuario'] = UsuarioDao() return DaoFactory._daos['usuario'] ``` ### Agregar Interfaz Base para DAOs ```python from abc import ABC, abstractmethod class BaseDao(ABC): def __init__(self): self._bd = ConexionBD.instancia() @abstractmethod def obtener_por_id(self, id): pass @abstractmethod def crear(self, obj): pass @abstractmethod def actualizar(self, obj): pass @abstractmethod def eliminar(self, id): pass ```