Modello di comando vs. modello Visitor
-
27-09-2019 - |
Domanda
E 'generalmente accettabile per consentire un visitatore di modificare lo stato del ricevitore, o che dovrebbero essere un modello di comando, invece?
Soluzione
Lo scopo del modello visitatore è quello di permettere nuove operazioni da aggiungere a una gerarchia di classe senza modifiche a quella gerarchia. Non ho mai visto nessuno che suggerisce che le operazioni di sola lettura solo sono accettabili. L'unica limitazione è che le operazioni di aggiunte dovrebbero usare solo l'interfaccia pubblica della gerarchia di classe.
Altri suggerimenti
Non credo che si può fare una dichiarazione generale se è buono o cattivo per modificare lo stato di nulla. Vorrei pensare che è ok per modificare gli stati fintanto che non influisce sulla logica in visita in sé. Ad esempio, si potrebbe scrivere un visitatore che le visite tutti i file sotto struttura di cartelle e rinomina il nome del file in lettere maiuscole.
l'esempio di Microsoft di un visitatore che modifica il ricevitore è il ExpressionVisitor . Lo scopo della classe ExpressionVisitor è di modificare un albero di espressione. Quindi credo che Microsoft, almeno pensa che sia accettabile.
Ogni modello ha il proprio pro, contro e casi d'uso.
È possibile utilizzare modello Command
per
-
Disaccoppiare l'invoker & ricevente di comando
-
Implementare callback meccanismo
-
Implementare Annulla e Ripristina funzionalità
-
Mantenere un cronologia dei comandi
modello Usa Visitor
in seguito scenari:
- devono essere eseguite operazioni simili su oggetti di diverso tipo raggruppati in una struttura
- è necessario eseguire molte operazioni distinte e indipendenti. Si separa Operazione da oggetti Struttura
- devono essere aggiunte nuove operazioni di senza cambiamento nella struttura degli oggetti
Related posts: