Patrón de diseño: SINGLETON

El patrón Singleton crea una única instancia en la ejecución de nuestra aplicación. Aunque queramos generar más instancias, siempre nos devolverá la misma. Otra característica es que podemos usarlo en un scope global (desde cualquier parte de nuestra aplicación).

SwiftBeta

Tabla de contenido


👇 SÍGUEME PARA APRENDER SWIFTUI, SWIFT, XCODE, etc 👇

El Singleton es un patrón de creación. Con él nos aseguramos que durante la ejecución de la aplicación solo se instancia una vez una clase y que se puede acceder desde cualquier punto.

Aveces nos es muy útil instanciar una vez una clase en el transcurso del ciclo de vida de una app. Sin ir más lejos tenemos ejemplos de Apple que usa en sus frameworks de iOS, como UserDefaults, Filemanager, UIApplication, etc

Cuando usamos UserDefaults estamos usando la misma instancia en todo el ciclo de vida de la aplicación y podemos usarlo en cualquier parte de nuestra aplicación.

Un ejemplo de que cada vez que llamamos a UserDefaults tiene siempre la misma instancia:

let userDefaults = UserDefaults.standard
// Referencia en memoria: <NSUserDefaults: 0x600003df8600>

let userDefaultsTwo = UserDefaults.standard
// Referencia en memoria: <NSUserDefaults: 0x600003df8600>

Ahora vamos a ver un ejemplo que podríamos implementar en una aplicación, por ejemplo, nuestra base de datos.

class Database {
    static let shared = Database()
    private init() { }
    
    func save(message: String) {
        print("Message saved: \(message)")
        // Some logic
    }
    
    func fetch(message: String) -> String {
        print("Fetch message: \(message)")
        // Some logic
        return ""
    }
}

Database.shared.save(message: "SwiftBeta - Singleton")

En el anterior código hemos creado un singleton de nuestra base de datos con dos métodos. Uno para guardar un mensaje y otro para buscar un mensaje.

Al querer usar cualquier de estos dos métodos solo tenemos que hacer lo siguiente:

Database.shared.save(message: "SwiftBeta - Singleton")


Hasta aquí el post de hoy, gracias por leernos! 🤓
Si tienes preguntas no dudes en contactar con nosotros a través de Twitter