2013-05-20 9 views
5

Definizione schema Iterator: fornisce un modo per accedere agli elementi di un oggetto aggregato in modo sequenziale senza esporre la sua rappresentazione sottostante. WikiPerché l'esposizione di una rappresentazione sottostante di iteratori è errata?

Quali sono le conseguenze di esporre la rappresentazione sottostante?

Per fornire una risposta più dettagliata: come viene impedito il pattern iteratore?

+4

In breve, tu (l'utente) usi un 'Iterator' allo stesso modo per un' ArrayList', 'HashMap',' HashSet', 'TreeSet'. Non ti interessa l'implementazione dietro –

risposta

5

Secondo: http://www.oodesign.com/iterator-pattern.html

L'idea del modello iteratore è quello di prendere la responsabilità di accesso e passando per gli oggetti della collezione e metterlo in oggetto iteratore. L'oggetto iteratore manterrà lo stato dell'iterazione, tenendo traccia dell'elemento corrente e disponendo di un modo per identificare quali elementi verranno successivamente iterati.

pochi benefici che si possono ottenere da questo schema:

  1. Utilizzando Iterator codice modello progettista può decidere se consentire 1 via iterazione (usando next()) o consentire l'iterazione inversa così (usando prev() come in ListIterator).
  2. Se consentire o meno la rimozione dell'oggetto, se sì, come.
  3. Mantiene la pulizia interna quando viene rimosso l'oggetto.
  4. Consente di esporre il meccanismo comune di attraversare una raccolta piuttosto che aspettarsi che i clienti comprendano le raccolte sottostanti.
1

Se la rappresentazione sottostante è stata esposta, il codice client potrebbe accoppiarsi. Quindi:

  • Se la rappresentazione cambia, potrebbe essere necessario modificare tutto il codice di accoppiamento ad esso.
  • Se si desidera eseguire l'iterazione su un diverso tipo di contenitore, potrebbe essere necessario modificare l'accoppiamento del codice nel vecchio contenitore.

L'astrazione dati rende il codice più resiliente a un cambiamento nella rappresentazione.

+0

potresti fornire un esempio di ciascun proiettile di cui stai parlando, vale a dire, sarebbe meraviglioso vedere in azione queste conseguenze. – lmiguelvargasf

1

In breve: tutto il codice che si basa sulla rappresentazione sottostante sarà da modificare se si decide di modificare la rappresentazione.

Ad esempio, si è deciso di utilizzare TreeMap all'inizio, ma in tal caso non si desidera più ordinare (nella maggior parte dei casi), quindi passare a HashMap. Qualcuno sta scorrendo la tua mappa cercando di ottenere una lista crescente. !!

Utilizzando lo schema di iterazione, è sempre possibile dare all'utente la possibilità di eseguire il looping di qualcosa con una determinata logica (o solo casuale, che è una sorta di logica) senza sapere cosa è sotto il cofano.

Ora, se si utilizza HashMap anziché TreeMap, è possibile esporre una vista ordinata all'utente.Se fornisci questo SortedIterator e informi l'utente "utilizzando questo garantirà che il risultato sia ordinato, ma non posso dirti nulla di ciò che è sotto", puoi cambiare la rappresentazione per essere quello che vuoi, purché il contratto di questo SortedIterator è gestito da te.

Problemi correlati