In che modo Observer crea un design liberamente accoppiato?

3

Comprendo perfettamente lo schema di progettazione di Observer, a cosa serve e come implementarlo. Capisco anche cosa significhi il termine "sciolto".

Ma non sono sicuro di come Observer rende i disegni più liberamente accoppiati.

Ad esempio, supponiamo che voglio che gli oggetti B e C ottengano gli aggiornamenti dall'oggetto A riguardo al suo stato. Il pattern Observer è un ottimo modo per farlo. Ma si potrebbe anche implementarlo con un metodo più "a forza bruta", non usando il modello.

Per favore, spiegami come il pattern Observer consente design più accoppiati. Non sono sicuro di aver capito completamente. Grazie

(Di nuovo, capisco cosa significhi "allentato", ma non esattamente in che modo l'Observer consente ai disegni di essere accoppiati più liberamente).

    
posta Aviv Cohn 30.03.2014 - 20:24
fonte

3 risposte

5

Usando il pattern di osservatore, A non ha bisogno di sapere su B o C. Se hai esplicitamente avuto una chiamata B e C, allora sarebbe necessariamente a conoscenza di B e C.

A seconda di come lo fai, B e C non sanno nemmeno di A, alcuni li lega tutti insieme.

Questa "mancanza di conoscenza" è al centro dei componenti di disaccoppiamento.

    
risposta data 30.03.2014 - 20:31
fonte
0

Il modo più semplice per implementare il pattern di osservatore è definire due interfacce, ad esempio ISource e ISink in una libreria di tipi.

Qualsiasi oggetto che può inviare segnali implementa ISource e qualsiasi oggetto che può ricevere segnali implementa ISink. Queste implementazioni dipendono dalla libreria dei tipi, ma non è necessario che contengano riferimenti tra loro.

Nell'applicazione è possibile quindi connettere le interfacce ISource e ISink degli oggetti senza che nessuna classe abbia bisogno di conoscere l'implementazione degli altri oggetti.

    
risposta data 31.03.2014 - 15:56
fonte
0

Se leggi il libro GoF Book , troverai la risposta alla tua domanda nella sezione applicabilità di il pattern Observer (pagina 294).

Applicability Use the Observer pattern in any of the following situations:

  • When an abstraction has two aspects, one dependent on the other. Encapsulating these aspects in separate objects lets you vary and reuse them independently.
  • When a change to one object requires changing others, and you don't know how many objects need to be changed.
  • When an object should be able to notify other objects without making assumptions about who these objects are. In other words, you don't what these objects tightly coupled.

Ci sono alcune parole chiave qui: 'incapsulare', 'variare e riutilizzare indipendentemente', 'un cambiamento in un oggetto che influenza gli altri' e 'fare ipotesi sugli oggetti'.

Questo può guidarti nelle tue indagini per capire meglio il patter. Inoltre, potrebbe essere una buona idea ottenere una copia del libro GoF e dargli una lettura.

    
risposta data 31.03.2014 - 16:27
fonte

Leggi altre domande sui tag