     }
 }
 
-public final class DefaultsCodableBridge<T: Codable>: DefaultsBridge<T> {
-
-    public override func save(key: String, value: T?, userDefaults: UserDefaults) {
+open class DefaultsCodableBridge<T: Codable>: DefaultsBridge<T> {
+
+    open override func save(key: String, value: T?, userDefaults: UserDefaults) {
         guard let value = value else {
             userDefaults.removeObject(forKey: key)
             return

    }
}

public final class DefaultsObjectBridge<T>: DefaultsBridge<T> {
    public override func save(key: String, value: T?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    public override func get(key: String, userDefaults: UserDefaults) -> T? {
        return userDefaults.object(forKey: key) as? T
    }
}

public final class DefaultsArrayBridge<T: Collection>: DefaultsBridge<T> {
    public override func save(key: String, value: T?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    public override func get(key: String, userDefaults: UserDefaults) -> T? {
        return userDefaults.array(forKey: key) as? T
    }
}

public final class DefaultsStringBridge: DefaultsBridge<String> {
    public override func save(key: String, value: String?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    public override func get(key: String, userDefaults: UserDefaults) -> String? {
        return userDefaults.string(forKey: key)
    }
}

public final class DefaultsIntBridge: DefaultsBridge<Int> {
    public override func save(key: String, value: Int?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    public override func get(key: String, userDefaults: UserDefaults) -> Int? {
        if let int = userDefaults.number(forKey: key)?.intValue {
            return int
        }

    }
}

open class DefaultsDataBridge: DefaultsBridge<Data> {
    open override func save(key: String, value: Data?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> Data? {
        return userDefaults.data(forKey: key)
    }
}

open class DefaultsUrlBridge: DefaultsBridge<URL> {
    open override func save(key: String, value: URL?, userDefaults: UserDefaults) {
        userDefaults.set(value, forKey: key)
    }

    open override func get(key: String, userDefaults: UserDefaults) -> URL? {
        return userDefaults.url(forKey: key)
    }

    open override func isSerialized() -> Bool {
        return true
    }

    open override func deserialize(_ object: Any) -> URL? {
        if let object = object as? URL {
            return object
        }
