Questo nel modello di Osservatore conta come composizione?

1

In una classica implementazione del pattern di progettazione di Observer, il soggetto ha una lista di riferimenti a tutti i suoi osservatori, e ogni osservatore potrebbe avere un riferimento al suo soggetto.

Questa è considerata una composizione? Per quanto ne so, composizione significa che un oggetto "include" in sé un altro oggetto, al fine di utilizzare le funzionalità di quell'oggetto . Nel modello Observer, il soggetto include in sé riferimenti ai suoi osservatori, ma non usa esattamente la loro funzionalità internamente per fare le cose esteriormente. Mantiene i riferimenti in modo che possa notificarli.

D'altra parte, il soggetto e gli osservatori mantengono una relazione di HAS-A, che spesso caratterizza la composizione (il soggetto ha osservatori, gli osservatori hanno un soggetto).

Questa è considerata una specie di composizione?

    
posta Aviv Cohn 19.03.2014 - 10:23
fonte

3 risposte

1

Essere notificato secondo il modello di osservatore è parte della funzionalità dell'oggetto di osservazione. Pertanto, questa è un'istanza di composizione.

Non è solo una parte grande della sua funzionalità: in genere, significa implementare un metodo semplice per soddisfare un'interfaccia molto leggera. Pertanto, questo non è in alcun modo un esempio prototipo di ciò a cui la gente penserà quando si parla di "composizione" a loro, l'accoppiamento è molto più sciolto di quanto potrebbe essere, ecc. Tutto ciò ci insegna che anche definizioni apparentemente chiare sono quasi sempre una questione di laurea in pratica.

    
risposta data 19.03.2014 - 10:34
fonte
1

Il modello di osservatore come mostrato in Wikipedia sembra essere basato sulla composizione - per chiamare notify() metodo, i soggetti devono "possedere" gli osservatori. I criteri per questo non sono l'uso di un oggetto, ma la vita - quando finisce la vita del soggetto, finisce anche la vita degli osservatori (che sono parti dei soggetti).

Tuttavia, l'originale modello di osservatore del libro GOF è meglio conosciuto con il nome abbonato editore : la notifica di altri oggetti funziona qui in modo simile, ma la durata degli oggetti "osservatori" e "osservati" è completamente indipendente. Pertanto, il sottoscrittore di publisher ha bisogno di un piccolo sforzo in più per implementare, gli oggetti sottoscrittore (= osservatori) devono registrarsi agli oggetti dell'editore (= oggetto), o per annullare la registrazione quando non vogliono più essere notificati. E quando la vita del soggetto termina, gli oggetti osservatori possono ancora rimanere, semplicemente non riceveranno più notifiche.

Quindi la risposta è: dipende da quale definizione del modello "osservatore" stai usando.

    
risposta data 19.03.2014 - 10:35
fonte
0

In sé e per sé lo schema dell'osservatore non è basato sulla composizione - non richiede la composizione.

Il tuo oggetto "ha" un osservatore ora, ma il secondo dopo il suo osservatore può essere sparito (disassociato).

Contrariamente a ciò che implica la composizione, le vite dell'osservatore e dell'osservabile possono essere indipendenti l'una dall'altra, quindi non è davvero una relazione "ha-un". Credo che sia un esempio di aggregazione.

Se la tua implementazione è strettamente accoppiata e l'osservabile istanzia i suoi stessi osservatori, allora non sopravviveranno dopo che l'osservabile è stato disposto e quindi questa è davvero composizione.

    
risposta data 19.03.2014 - 10:33
fonte