2011-10-09 25 views
10

Ho appena appreso il pattern Bridge e il suo intento: Disaccoppia un'astrazione dalla sua implementazione in modo che i due possano variare in modo indipendente.AbstractFactory Versus Bridge Pattern

Ma perché non è bastato un AbstractFactory fare la stessa cosa?

So che un AbstractFactory in grado di creare un particolare ponte, ma la mia domanda riguarda l'utilizzo di AbstractFactory invece Bridge per il disaccoppiamento Astrazione e implementazione.

Potresti spiegarmi la vera differenza tra AbstractFactory e Bridge Pattern?

risposta

4

Prima di tutto il modello di bridge da quello che ho letto è più per quando la classe e ciò che fa varia spesso. La classe stessa può essere considerata come l'implementazione e il comportamento della classe come l'astrazione.

La Fabbrica astratta fornisce invece un'interfaccia per la creazione di gruppi di oggetti correlati o dipendenti, senza specificare le loro classi concrete; i loro problemi di implementazione.

Quindi, suppongo di riassumere, stai confrontando le mele con le arance e forse è da lì che proviene la confusione. Sono per risolvere diversi problemi.

Per me le operazioni implicano metodi in java, quindi le operazioni sono definite o dichiarate dall'astrazione, ma sono implementate nella classe stessa. Quindi sì, l'astrazione sta solo dichiarando ciò che le operazioni potrebbero fare fino al comportamento, ma le effettive implementazioni sono fatte nella classe. Inoltre, anche la fabbrica astratta è corretta.

Immagino che la parte che definisce il bridge sia che potrebbe avere serie di astrazioni che variano rispetto a un'astrazione.

Design Patterns utilizza la parola astrazione per fare riferimento a una classe che fa affidamento su un insieme di operazioni astratte, in cui sono possibili diverse implementazioni dell'insieme di operazioni astratte.

vedere questi link per ulteriori informazioni:

Using Abstractions and the Bridge Pattern in Java

Wikipedia: Bridge_Pattern

Bridge Pattern in Java

The Bridge Pattern Design Pattern

+1

Grazie per questa spiegazione. Dimmi solo che ho ragione: con Bridge, tutte le operazioni primitive dovrebbero essere implementate dagli implementatori e non dall'astrazione stessa.D'altra parte, con AbstractFactory, il suo intento è solo quello di creare oggetti (per esempio oggetti che contengono nel lato Abstraction di Bridge Pattern) ma questo modello non si aspetta mai che tutte le operazioni primitive debbano essere implementate nel lato Abstraction. Quindi non è previsto l'uso sempre delegazione come objectCreatedByFactory.doSomething() per tutte le operazioni primitive – Mik378

1

Sì. Sono simili. AF è usato per creare famiglie di oggetti. Dove come Bridge si tratta più di comportamento e consente anche un accoppiamento lento tra algoritmo e piattaforma.

ad esempio: Supponiamo di sviluppare un programma per la diagnostica di rete utilizzando Ping e Traceroute, i comandi su diverse piattaforme sono diversi. La fabbrica astratta può essere utilizzata per ottenere un'istanza di ping o traceroute per qualsiasi piattaforma. Non finisce qui. Bridge ci consente di sviluppare un algoritmo di livello superiore usando quei comandi di ping e trace restituiti da AF. L'algoritmo che può utilizzare una sequenza diversa di ping e traceroute, a seconda della piattaforma, può essere estratto dai dettagli specifici dell'implementazione della piattaforma utilizzando il pattern del bridge.

1

Ci sono alcune differenze e non possiamo confrontarle entrambe.

  1. Abstract Factory è creazionale modello di progettazione, che si occupa di creazione di oggetti. Bridge è modello di progettazione strutturale, che si occupa della struttura e della composizione della classe.

  2. In Bridge, l'astrazione e l'implementazione variano in modo indipendente. Ma in fabbrica astratta, se cambi l'astrazione (interfaccia), devi cambiare cliente.

abstract_factory modello caso d'uso:

  1. Quando il sistema deve creare più famiglie di prodotti o se si vuole fornire una libreria di prodotti senza esporre i dettagli di implementazione.

Lista di controllo:

  1. Decidere se "piattaforma di indipendenza" e la creazione di servizi sono la fonte corrente del dolore.
  2. Mappa una matrice di "piattaforme" rispetto a "prodotti".
  3. Definire un'interfaccia di fabbrica che consiste in un metodo di fabbrica per prodotto.
  4. Definire una classe derivata dalla fabbrica per ogni piattaforma che incapsula tutti i riferimenti al nuovo operatore.
  5. Il client deve ritirare tutti i riferimenti a nuovo e utilizzare i metodi di fabbrica per creare gli oggetti prodotto.

bridge modello:

Usalo quando:

  1. si desidera runtime vincolante dell'attuazione,
  2. si dispone di una proliferazione di classi da un'interfaccia accoppiati e numerose implementazioni,
  3. si desidera condividere un'implementazione tra più oggetti,
  4. è necessario p gerarchie di classi ortogonali.

SE Domande correlate:

Does the Bridge Pattern decouples an abstraction from implementation?

What is the basic difference between the Factory and Abstract Factory Patterns?

Date un'occhiata a questo articolo journaldev e sourcemaking articolo per la comprensione approfondita dei vari modelli di progettazione.