Domanda

E 'generalmente accettabile per consentire un visitatore di modificare lo stato del ricevitore, o che dovrebbero essere un modello di comando, invece?

È stato utile?

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

  1. Disaccoppiare l'invoker & ricevente di comando

  2. Implementare callback meccanismo

  3. Implementare Annulla e Ripristina funzionalità

  4. Mantenere un cronologia dei comandi

modello Usa Visitor in seguito scenari:

  1. devono essere eseguite operazioni simili su oggetti di diverso tipo raggruppati in una struttura
  2. è necessario eseguire molte operazioni distinte e indipendenti. Si separa Operazione da oggetti Struttura
  3. devono essere aggiunte nuove operazioni di senza cambiamento nella struttura degli oggetti

Related posts:

Usando modello di comando design

Quando devo usare il pattern Visitor Design?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top