Sobes.tech
Junior

¿Qué patrones de diseño conoces?

sobes.tech AI

Respuesta de la IA

Generadores:

  • Singleton: Garantiza que solo exista una instancia de la clase y proporciona un punto de acceso global a ella.
  • Factory Method: Define una interfaz para crear un objeto, pero permite a las subclases decidir qué clase instanciar.
  • Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
  • Builder: Divide la construcción de un objeto complejo en pasos, permitiendo crear diferentes representaciones del objeto usando el mismo proceso de construcción.
  • Prototype: Crea objetos duplicando una instancia existente (prototipo), en lugar de realizar el proceso de construcción desde cero.

Estructurales:

  • Adapter: Convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que clases con interfaces incompatibles trabajen juntas.
  • Bridge: Separa la abstracción de su implementación, permitiendo que ambas varíen de manera independiente.
  • Composite: Compone objetos en estructuras de árbol para representar jerarquías parte-todo. Permite a los clientes tratar de manera uniforme objetos individuales y composiciones de objetos.
  • Decorator: Añade responsabilidades adicionales a un objeto de manera dinámica envolviéndolo en un objeto decorador.
  • Facade: Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema. Define una interfaz de nivel superior que hace más fácil su uso.
  • Flyweight: Utiliza el estado compartido entre muchas pequeñas objetos para reducir el uso de memoria y mejorar el rendimiento.
  • Proxy: Proporciona un representante o sustituto de un objeto que controla el acceso a él.

Conductuales:

  • Chain of Responsibility: Pasa la solicitud a lo largo de una cadena de manejadores. Cada manejador decide si procesa la solicitud o la pasa al siguiente.
  • Command: Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con diferentes solicitudes, encolar solicitudes o registrar sus ejecuciones.
  • Interpreter: Define la gramática para un lenguaje y proporciona un intérprete para interpretar las expresiones en ese lenguaje.
  • Iterator: Proporciona un método para acceder secuencialmente a los elementos de una colección sin exponer su representación subyacente.
  • Mediator: Define objetos que controlan la interacción entre un conjunto de objetos. Promueve la baja acoplamiento al hacer que los objetos interactúen a través de un mediador.
  • Memento: Permite guardar y restaurar el estado interno de un objeto sin violar su encapsulación.
  • Observer: Define una dependencia uno a muchos entre objetos, de modo que cuando uno cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.
  • State: Permite a un objeto alterar su comportamiento cuando su estado interno cambia. El objeto parecerá cambiar de clase.
  • Strategy: Define una familia de algoritmos, encapsula cada uno y los hace intercambiables. Permite seleccionar el algoritmo en tiempo de ejecución.
  • Template Method: Define el esqueleto de un algoritmo en una operación, dejando algunos pasos a las subclases. Permite a las subclases redefinir ciertos pasos del algoritmo sin cambiar su estructura.
  • Visitor: Representa una operación que se realiza sobre los elementos de una estructura de objetos. Permite definir nuevas operaciones sin cambiar las clases de los elementos sobre los que opera.

En desarrollo iOS también se encuentran con frecuencia:

  • Model-View-Controller (MVC): Patrón arquitectónico que divide la aplicación en tres componentes relacionados: Modelo (datos y lógica de negocio), Vista (interfaz de usuario) y Controlador (interacción entre Modelo y Vista).
  • Delegate: Patrón que permite que un objeto actúe en nombre o coordine acciones de otro objeto.
  • Observer (NotificationCenter): Sistema de distribución de notificaciones que permite a los objetos recibir mensajes sin una relación directa entre ellos.
  • Target-Action: Mecanismo utilizado para enviar mensajes desde elementos de control (como botones) a un objeto destino.
  • Coordinator: Patrón para gestionar flujos de navegación en una aplicación, separando la lógica de navegación de los controladores.
  • Dependency Injection: Patrón donde las dependencias de un objeto se inyectan desde fuera en lugar de ser creadas por el mismo objeto.
// Ejemplo Singleton
class SettingsManager {
    static let shared = SettingsManager() // Instancia única

    private init() {
        // Constructor privado para evitar creación externa
    }

    var appVersion: String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Desconocido"
    }
}

// Uso
let settings = SettingsManager.shared
print("Versión de la app: \(settings.appVersion)")
// Ejemplo Delegate (simple)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Propiedad delegado

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        delegate?.buttonWasTapped(self) // Llamada al método del delegado
    }
}

class ViewController: UIViewController, ButtonDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
        myButton.setTitle("Toca aquí", for: .normal)
        myButton.backgroundColor = .blue
        myButton.delegate = self // Establecer delegado
        view.addSubview(myButton)
    }

    func buttonWasTapped(_ button: UIButton) {
        print("El botón fue tocado en ViewController")
    }
}