Padrões Iterator, Interpreter e Visitor
Iterator (257) - Behavioral
- Objetivo: prover uma forma de acessar os elementos de um agregado sequencialmente sem expor sua representação interna.
- Em outras palavras, uma forma uniforme de percorrer diferentes tipos de coleções de objetos.
- Também conhecido como: Cursor
- Usos conhecidos: coleções em Smalltalk; posteriormente adotadas em C++ STL, em Java e em boa parte das linguagens modernas.
- Em Smalltalk podemos usar iteradores implicitamente (através, por exemplo do Collection>>do:) ou explicitamente através de
Streams que oferecem uma interface no estilo de iteradores.
- Esse estilo foi também introduzido em java e python. Interessante ver a evolução em Java: https://knowm.org/iterating-through-a-collection-in-java/
- Um muito bom sobre o padrão Iterator
Interpreter (243) - Comportamental
- Objetivo: dada uma linguagem, define uma representação para sua gramática juntamente com um interpretador que usa essa representação para interpretar sentenças na linguagem.
- Motivação: Se um tipo específico de problema ocorre com bastante frequência, pode valer a pena expressar instâncias do problema como sentenças em uma linguagem simples. Então você pode construir um interpretador que resolva o problema interpretando essas sentenças.
- Usos: implementação de compiladores, implementação de processadores de XML, interpretadores de comandos (
shell ), chatbots, etc. - Um exemplo interessante em Java
- A descrição do GoF com exemplos de implementação em Smalltalk e C++
- Exemplo de padrão mais sofisticado contruído em cima do Interpreter:
Batching: A design pattern for efficient and flexible client/server interaction
- Maiores detalhes: na disciplina de Compilação.
Última atualização: segunda-feira, 31 out. 2022, 17:33