Ricerca…


introduzione

I modelli di progettazione sono soluzioni generali ai problemi che si verificano frequentemente nello sviluppo del software. I seguenti sono modelli di migliori pratiche standardizzate nella strutturazione e progettazione del codice, nonché esempi di contesti comuni in cui questi modelli di progettazione sarebbero appropriati.

I modelli di progettazione strutturale si concentrano sulla composizione di classi e oggetti per creare interfacce e ottenere una maggiore funzionalità.

Adattatore

Gli adattatori sono usati per convertire l'interfaccia di una data classe, nota come Adaptee , in un'altra interfaccia, chiamata Target . Le operazioni sul bersaglio sono chiamate da un cliente e tali operazioni vengono adattate dall'adapter e trasmesse a Adaptee.

In Swift, gli adattatori possono spesso essere formati attraverso l'uso di protocolli. Nell'esempio seguente, un Client in grado di comunicare con il Target viene fornito con la capacità di eseguire funzioni della classe Adaptee tramite l'uso di un adattatore.

// The functionality to which a Client has no direct access
class Adaptee {
    func foo() {
        // ...
    }
}

// Target's functionality, to which a Client does have direct access
protocol TargetFunctionality {
    func fooBar() {}
}

// Adapter used to pass the request on the Target to a request on the Adaptee
extension Adaptee: TargetFunctionality {
    func fooBar() {
        foo()
    }
}

Esempio di flusso di un adattatore unidirezionale: Client -> Target -> Adapter -> Adaptee

Gli adattatori possono anche essere bidirezionali e questi sono noti come adattatori a due vie . Un adattatore bidirezionale può essere utile quando due client diversi devono visualizzare un oggetto in modo diverso.

Facciata

A Facade fornisce un'interfaccia unificata e di alto livello per le interfacce del sottosistema. Ciò consente un accesso più semplice e sicuro alle strutture più generali di un sottosistema.

Di seguito è riportato un esempio di facciata utilizzato per impostare e recuperare oggetti in UserDefaults.

enum Defaults {

    static func set(_ object: Any, forKey defaultName: String) {
        let defaults: UserDefaults = UserDefaults.standard
        defaults.set(object, forKey:defaultName)
        defaults.synchronize()
    }

    static func object(forKey key: String) -> AnyObject! {
        let defaults: UserDefaults = UserDefaults.standard
        return defaults.object(forKey: key) as AnyObject!
    }

}

L'utilizzo potrebbe essere simile al seguente.

Defaults.set("Beyond all recognition.", forKey:"fooBar")
Defaults.object(forKey: "fooBar")

Le complessità di accesso all'istanza condivisa e la sincronizzazione di UserDefaults sono nascoste dal client e questa interfaccia è accessibile da qualsiasi punto del programma.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow