ventajas que patron iteradores iterador implementar ejemplos desventajas java iterator

java - que - patron iterator ventajas y desventajas



Iterador externo vs Iterador interno (3)

¿Qué es un iterador externo e interno en Java?



Encontré esta descripción :

Repetidores externos vs. internos

Iteradores externos: cuando la iteración está controlada por el objeto de colección, decimos que tenemos un iterador externo.

En idiomas como .net o Java, es muy fácil crear iteradores externos. En nuestra implementación clásica, se implementa un iterador externo. En el siguiente ejemplo, se usa un iterador externo:

// using iterators for a clloection of String objects: // using in a for loop for (Iterator it = options.iterator(); it.hasNext(); ) { String name = (String)it.next(); System.out.println(name); } // using in while loop Iterator name = options.iterator(); while (name.hasNext() ){ System.out.println(name.next() ); } // using in a for-each loop (syntax available from java 1.5 and above) for (Object item : options) System.out.println(((String)item));

Iteradores internos: cuando el iterador lo controla tenemos un iterador interno

Por otro lado, implementar y usar iteradores internos es realmente difícil. Cuando se usa un iterador interno, significa que el código que se ejecutará se delega al objeto agregado. Por ejemplo, en los idiomas que ofrecen soporte para esto es fácil llamar iteradores internos:

collection do: [:each | each doSomething] (Smalltalk)

La idea principal es pasar el código para ser ejecutado en la colección. Luego, la colección llamará internamente el método doSomething en cada uno de los componentes. En C ++, es posible enviar el método doMethod como un puntero. En C #, .NET o VB.NET, es posible enviar el método como delegado. En java, se debe usar el patrón de diseño de Functor . La idea principal es crear una interfaz base con solo un método (doSomething). Luego, el método se implementará en una clase que implemente la interfaz y la clase se pasará a la colección para iterar. Para más detalles ver el patrón de diseño de Functor .


Iterador externo

Cuando obtienes un iterador y lo pisas, es un iterador externo

for (Iterator iter = var.iterator(); iter.hasNext(); ) { Object obj = iter.next(); // Operate on obj }

Iterador interno

Cuando pasa un objeto de función a un método para ejecutar sobre una lista, eso es un iterador interno

var.each( new Functor() { public void operate(Object arg) { arg *= 2; } });