Definição: fornece um método para acessar vários elementos em um objeto de contêiner sem expor os detalhes internos do objeto.
Tipo: padrão comportamental
Diagrama de classe:
Se você deseja perguntar o modo mais usado em Java, a resposta não é o modo Singleton, nem o modo de fábrica, nem o modo de estratégia, mas o modo Iterador.
public static void print (coleta coll) {iterator it = coll.iterator (); A função desse método é imprimir um loop de coleta de strings, e o padrão do iterador é usado no padrão do iterador. Quando se trata de iteradores, antes de tudo, está relacionado a conjuntos.
A estrutura do padrão do iterador
Contêiner de resumo: Geralmente, o método iterator () é fornecido, como interface de coleta, interface de lista, interface definida, etc. em java.
Contêiner específico: é a classe de implementação concreta de contêineres abstratos, como a lista ordenada da interface da lista para implementar a ArrayList, a lista vinculada da interface da lista para implementar o LinkList, a lista de hash da interface definida para implementar hashset, etc.
Resumo Iterador: Defina o método necessário para atravessar elementos.
Implementação do iterador: implementa os métodos definidos na interface do iterador para concluir a iteração da coleção.
Dê um exemplo
Como os regulamentos do próprio modo iterador são relativamente frouxos, a implementação específica é diversa. Vamos dar apenas um exemplo aqui, e não podemos apresentar os métodos de implementação um por um. Portanto, antes de dar um exemplo, vamos listar os métodos de implementação do próximo padrão de iterador.
1. A função do iterador define a interface para Traversal, mas não especifica quem controla a iteração. Na aplicação da coleção Java, o processo de Traversal é controlado pelo programa Client, que é chamado de iterador externo; Os iteradores externos são flexíveis e poderosos que os iteradores internos, e os iteradores internos são muito fracos no ambiente de localidade Java.
2. Não há provisão para quem implementará o algoritmo de travessia no modo Iterador. Parece ser considerado garantido para implementar funções de iterador. Como é conveniente para que diferentes algoritmos de travessia sejam usados em um contêiner, também é conveniente para aplicar um algoritmo de travessia a diferentes contêineres. Mas isso destrói o encapsulamento do contêiner - a função de contêiner deve divulgar seus próprios atributos privados, o que em Java significa expor seus próprios atributos privados a outras classes.
Então vamos colocá -lo na função de contêiner para implementá -lo. Dessa forma, a função Iterator é substituída para armazenar apenas uma função que atravessa o local atual. Mas o algoritmo de travessia está fortemente amarrado a um recipiente específico.
Na aplicação da coleção Java, a função de iterador específica fornecida é a classe interna definida na função de contêiner. Isso protege a embalagem do contêiner. Mas, ao mesmo tempo, o contêiner também fornece uma interface de algoritmo travessia e você pode estender seu próprio iterador.
Ok, vamos dar uma olhada em como o iterador na coleção Java é implementado.
// ITERATER PAPEL, define apenas a interface da interface do travessa itere {boolean hasNext (); É apenas uma interface, por isso não será listada. Para destacar os pontos -chave, nos referimos à lista e conteúdo relacionado ao iterador // A função de iterador específica é derivada na forma de uma classe interna. AbstractList existe para extrair as partes comuns de cada papel específico do contêiner. classe abstrata abstrataList estende a lista de implementos abstratos {... // Este é o método de fábrica responsável por criar funções de iterador específicas Public Iterator () {Return new Itr ();} // como o Iterator específico do ITRON (ITRON). } objeto público a seguir () { checkforComodification (); .This.Remove (lastret); cursor-- lastret = -1;Quanto ao uso do modo iterador. Conforme listado na introdução, o programa do cliente precisa obter primeiro a função de contêiner específica e, em seguida, obter a função de iterador específica por meio da função de contêiner específica. Dessa forma, você pode usar a função de iterador específica para atravessar o contêiner ...
Prós e contras do modo iterador
As vantagens do modo iterador são:
O método Traversal foi simplificado e ainda é bastante problemático atravessar a coleta de objetos. Depois de introduzir o método do iterador, é muito mais fácil para os usuários usar.
Existem muitas maneiras de atravessar, como para listas ordenadas, podemos fornecer a dois iteradores com pedidos positivos e transversal de pedidos reversos de acordo com as necessidades.
O encapsulamento é bom e os usuários precisam apenas de um iterador para atravessar, mas não precisam se preocupar com algoritmos de travessia.
Desvantagens do padrão do iterador:
Para travessias simples (como matrizes ou listas ordenadas), é mais pesado usar iteradores, e todos podem sentir que, como a Arraylist, preferimos usar em loops e obter métodos para atravessar a coleção.
Cenários aplicáveis para o modo iterador
O padrão do iterador é simbiótico e a morte com a coleção. Se queremos implementar um novo contêiner, é claro que também precisamos introduzir um padrão de iterador para implementar um iterador para o nosso contêiner.
No entanto, como o relacionamento entre os contêineres e os iteradores está muito próximo, a maioria dos idiomas fornece iteradores ao implementar contêineres e os contêineres e iteradores fornecidos por esses idiomas podem atender às nossas necessidades na maioria dos casos.