2010-07-12 8 views
6

Non riesco a decidere quale modello è più adatto al seguente problema.Miglior schema di progettazione da utilizzare: adattatore o facciata

Ho un sistema client che interagirà con un sottosistema separato. Il sottosistema è piuttosto complicato e quindi ho bisogno di un'interfaccia tra i due per semplificare il sistema client. Questo suona come un modello perfetto per il modello di facciata, ma penso che anche lo schema dell'adattatore sia adatto al mio problema.

Fa alcuna differenza se l'interfaccia nel mezzo chiama singole attività sul sottosistema attraverso semplici chiamate API?

risposta

9

Dalla tua descrizione è più in linea con la definizione accettata della facciata, ma direi che è più un dibattito semantico che altro. La facciata in generale riduce maggiormente la complessità dell'interfaccia con un intero sottosistema, mentre l'adattatore è più orientato verso la modifica di un'interfaccia esistente o richiama le tue esigenze specifiche (ad es. La funzionalità di base è lì, ma i tipi di ritorno non sono proprio quello che vuoi, eccetera).

6

Questo chiaramente sembra essere un caso modello di facciata il tuo obiettivo è la semplificazione piuttosto che un adattamento reale.

facciata Definizione:

fornire un'interfaccia unificata per un insieme di interfacce in un sottosistema. Façade definisce un'interfaccia di livello superiore che rende il sottosistema più facile da usare.

adattatore Definizione:

Convert l'interfaccia di una classe in un'altra interfaccia clienti si aspettano. L'adattatore consente alle classi di funzionare insieme che non potrebbero altrimenti a causa delle interfacce incompatibili .

Definizioni sollevato da: http://dofactory.com/Patterns/Patterns.aspx

0

La differenza tra facciata e l'adattatore è in gran parte l'intento.

Se quello che vuoi fare è semplificare l'interfaccia, allora stai guardando una facciata. Se si desidera adattare l'interfaccia in modo che possa essere utilizzata come qualcos'altro, è un adattatore.

Ma in realtà, qual è il problema come lo chiami? La mia regola generale è che se stai implementando un'interfaccia esistente probabilmente stai usando l'interfaccia Adapter. Se stai creando una nuova interfaccia semplificata è una facciata.

5

L'adattatore modello viene utilizzato quando si desidera adattare un'interfaccia di una classe esistente a un'altra interfaccia con la quale un client si aspetta di lavorare. Di solito implica solo la delega o la traduzione da un metodo di un'interfaccia al metodo corrispondente dell'altro.

La facciata viene utilizzata quando si desidera semplificare un sistema complesso esponendo un insieme più semplice di API con cui un client può lavorare. Implica la traduzione di un modello complesso di chiamate API in una singola chiamata API.

Il tuo caso sembra più che tu abbia bisogno di una facciata che di un adattatore. L'implementazione del solo modello di adattatore non offre il vantaggio della semplificazione dell'API. Alla fine, non importa come lo chiami. E questi modelli non sono esclusivi. Potresti combinare entrambi in un modo che ti dà il massimo beneficio.

-3

La facciata riguarda l'interfaccia, non l'implementazione. Il suo scopo è quello di nascondere la complessità interna dietro una singola interfaccia che appare semplice all'esterno.

0

Facade modello (Un oggetto che fornisce un'interfaccia semplificata a un corpo più grande di codice) adatto per il vostro caso d'uso.

Lista di controllo da utilizzare Facciata: (Da Wikipedia l'articolo collegato)

  1. Una semplice interfaccia è necessario per accedere a un sistema complesso.
  2. Le astrazioni e le implementazioni di un sottosistema sono strettamente accoppiate.
  3. È necessario un punto di ingresso per ogni livello di software stratificato.
  4. Il sistema è molto complesso o di difficile comprensione.

Domande SE correlate per ulteriori dettagli su Facciata.

What is Facade Design Pattern?

Anche se entrambi Facciata e adattatore sono schemi strutturali, l'intento è differente (risposta samitgaur spiegato parte intento ben).

Poiché non si converte un'interfaccia in un'altra interfaccia, l'adattatore non è adatto al proprio scopo.

SE connessa interrogazione:

What is the difference between the Facade and Adapter Pattern?

Problemi correlati