Per coloro che hanno familiarità con il modello di mediatore ...Attuazione del modello di mediatore in Delphi senza ottenere i riferimenti circolari
Voglio realizzare il modello di mediatore in Delphi, ma il compilatore Delphi non può gestire i riferimenti circolari necessario.
Guardando il diagramma GOF originale da "Modelli di progettazione", il Mediatore ha un riferimento a ciascun collega, ma molti degli oggetti del collega hanno un riferimento al Mediatore.
questo non è un problema nella maggior parte delle lingue, ma il mio compilatore Delphi mi sta dando 'F2047 unità circolare riferimento a ...'
Sarebbe this approach, utilizzando interfacce, essere qualsiasi uso? (Sembra complicato)
Sto usando Delphi 2010
[Sintesi soluzione]
Giusto per riassumere la risposta accettata: In lingue che permettono i riferimenti circolari, è possibile omettere la classe mediatore astratta (come descritto nella sezione "Implementazione" di GoF a pagina 278). L'unico modo per implementare Mediator in Delphi senza una classe di mediatore astratta è di avere tutte le classi in una sola unità.
In caso contrario, è necessaria una classe di base Mediator extra in aggiunta alla sottoclasse di calcestruzzo.
vostri clausole usi per le tre Unità sarebbe simile a questa:
ConcreteColleage1 Usi mediatore
ConcreteMediator Usi mediatore, ConcreateColleague1
Mediator (Non utilizzare uno)
Nessun riferimenti circolari!
Mi riferisco allo schema del Mediatore come descritto nel libro Design Patterns di GoF. Nello specifico, il diagramma a pagina 274. 'aButton' ha un riferimento a 'aFontDialogDirector' e viceversa 'aFontDialogDirector' ha un riferimento a 'aButton'. Quindi in Delphi, queste due classi devono essere nella stessa unità. – awmross
Dopo aver letto la tua risposta con più attenzione, ora vedo che è giusto. Devo creare una classe Mediator di base in un'unità e sottoclassi in un'altra unità. Se modifichi la tua risposta posso cambiare il mio downvote a un upvote :-) – awmross