Ho il seguente problema: Ho un set di motori che automaticamente (ascoltando gli eventi) controlla il mio modello. La figura seguente mostra, in generale, il diagramma delle classi: Identificare le implementazioni della classe base in un array
Ora ho un cliente che conosce l'EngineFacade e voglio impostare la proprietà attiva dal Engine2 dal client, ma né il cliente né l'EngineFacade sa quale delle tre motori è Engine2.
Ci sono due modi, ma non mi piace nessuno di loro:
- Verificare se uno dei motori è di tipo Engine2 - se v'è un'altra classe che fa la stessa operazione, ma è denominata diverso Ho per cambiarlo in EngineBuilder E in EngineFacade.
- Verificare con una stringa identificatore - Non mi piacciono molto le stringhe magiche.
Quello che so sul sito del cliente è che c'è o dovrebbe essere un motore che gestisce la griglia. Ma non so di più.
Forse dovrei scegliere tra i due diavoli, ma forse uno di voi ha una soluzione migliore.
Se è necessario identificare ogni motore separatamente, l'opzione semplice è assegnargli un identificativo univoco. Un altro modo per farlo è avere una proprietà name sul motore di base. Ogni motore implementa la proprietà name e quindi attiva un evento e quindi esamina il parametro del mittente. –
Forse dovresti esaminare l'astrazione fornita dalla facciata. Sembra che tu abbia delle perdite. –
Si potrebbe voler includere il client, i suoi metodi e le sue variabili nel diagramma, o pubblicare un codice che ne illustri l'utilizzo. –