SlideShare a Scribd company logo
Iterator	
  Design	
  Pa.ern	
  

      Stewart	
  Gleadow	
  
   University	
  of	
  Melbourne	
  
Intent	
  
•  “Provide	
  a	
  way	
  to	
  access	
  the	
  elements	
  of	
  an	
  
      aggregate	
  object	
  sequen>ally	
  without	
  
      exposing	
  its	
  underlying	
  representa>on”	
  
  	
   	
  	
   	
   	
   	
   	
   	
  –	
  GoF	
  
Mo3va3on	
  
•  Hide	
  implementa3on	
  details	
  

•  Allow	
  for	
  different	
  traversals	
  

•  Separate	
  traversal	
  code	
  from	
  the	
  list	
  itself	
  
Basic	
  Structure	
  
        List                                  Iterator
count()                                 first()
add(Item)                               next()
remove(Item)                            isDone()
Item get(int index)                     Item currentItem()




•  Provide	
  List	
  to	
  Iterator	
  (3ghtly	
  coupled)	
  

•  Iterator	
  keeps	
  a	
  Cursor	
  to	
  current	
  loca3on	
  
Structure	
  
     Aggregate                                  Iterator
 createIterator()                          first()
                                           next()
                                           isDone()
                                           Item currentItem()



ConcreteAggregate                           ConcreteIterator
 createIterator()



return new ConcreteIterator(this)
Types	
  of	
  Iterators	
  
•  External:	
  client	
  controls	
  the	
  itera3on	
  

•  Internal:	
  iterator	
  controls	
  itera3on	
  
        •  anonymous	
  func3ons	
  
        •  closures	
  /	
  blocks	
  
Applicability	
  
•  List	
  processing	
  &	
  selec3on	
  

•  Tree	
  traversals.	
  eg.	
  depth	
  first	
  

•  Syntax	
  trees	
  -­‐>	
  Interpreter?	
  
Concurrency	
  
•  hasNext()	
  or	
  !isDone()	
  implies	
  subsequent	
  call	
  
   to	
  currentItem()	
  will	
  pass	
  

•  Iterators	
  get	
  a	
  copy	
  of	
  the	
  data?	
  

•  Iterators	
  keep	
  track	
  of	
  modifica3ons?	
  
External	
  (Java)	
  
Iterator<MyType> iter = list.iterator();!
while(iter.hasNext())!
 !System.out.println(iter.next());!

// OR!

for(MyType item : list)!
 !System.out.println(item);!
External	
  (Ruby)	
  
for item in list!
 !puts item!
end!

// OR!

list.each { |item| puts item }!
Internal	
  (Java)	
  
public abstract class Internal<T> {!
 !private Iterator<T> iter;!

     public void traverse() {!
        for(T item : iter)!
          process(item);!
     }!

     protected abstract process(T item);!
}!
Internal	
  (Java)	
  
Iterator<T> iter = list.iterator();!
Internal<T> internal = new Internal<T>(iter)!
{!
 !protected void process(T item) {!
 ! ! !if(condition)!
 ! ! ! !System.out.println(item);!
 !}!
};!
Internal	
  (Ruby)	
  

list.each { |item| puts item if condition }!

More Related Content

What's hot

Proxy Design Pattern
Proxy Design PatternProxy Design Pattern
Proxy Design Pattern
Anjan Kumar Bollam
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
hyun soomyung
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
Prof. Erwin Globio
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
Omri Spector
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Helder da Rocha
 
Listeners and filters in servlet
Listeners and filters in servletListeners and filters in servlet
Listeners and filters in servlet
Shree M.L.Kakadiya MCA mahila college, Amreli
 
Java Collections
Java CollectionsJava Collections
Java Collections
parag
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
 
Win idea manual
Win idea manualWin idea manual
Win idea manual
Ngọc Thái Nguyễn
 
Servlets
ServletsServlets
Servlets
Geethu Mohan
 
Java collections
Java collectionsJava collections
Java collections
Hamid Ghorbani
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design Pattern
Varun MC
 
Event handling
Event handlingEvent handling
Event handling
Anand Grewal
 
Memento pattern
Memento patternMemento pattern
Memento pattern
Sayanton Vhaduri
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Edureka!
 
JUnit 5
JUnit 5JUnit 5
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
Anuj Singh Rajput
 
Spring Core
Spring CoreSpring Core
Spring Core
Pushan Bhattacharya
 
ASP.NET State management
ASP.NET State managementASP.NET State management
ASP.NET State management
Shivanand Arur
 

What's hot (20)

Proxy Design Pattern
Proxy Design PatternProxy Design Pattern
Proxy Design Pattern
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Listeners and filters in servlet
Listeners and filters in servletListeners and filters in servlet
Listeners and filters in servlet
 
Java Collections
Java CollectionsJava Collections
Java Collections
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Win idea manual
Win idea manualWin idea manual
Win idea manual
 
Servlets
ServletsServlets
Servlets
 
Java collections
Java collectionsJava collections
Java collections
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design Pattern
 
Event handling
Event handlingEvent handling
Event handling
 
Memento pattern
Memento patternMemento pattern
Memento pattern
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
 
JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
 
Spring Core
Spring CoreSpring Core
Spring Core
 
ASP.NET State management
ASP.NET State managementASP.NET State management
ASP.NET State management
 

Viewers also liked

The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator Pattern
Eric Torreborre
 
C# Strings
C# StringsC# Strings
C# Strings
Hock Leng PUAH
 
Behavioral Design Patterns
Behavioral Design PatternsBehavioral Design Patterns
Behavioral Design Patterns
Lidan Hifi
 
Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621
melbournepatterns
 
Command and Adapter Pattern
Command and Adapter PatternCommand and Adapter Pattern
Command and Adapter Pattern
Jonathan Simon
 
Programming in c#
Programming in c#Programming in c#
Programming in c#
Shehrevar Davierwala
 
C# Tutorial
C# Tutorial C# Tutorial
C# Tutorial
Jm Ramos
 

Viewers also liked (7)

The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator Pattern
 
C# Strings
C# StringsC# Strings
C# Strings
 
Behavioral Design Patterns
Behavioral Design PatternsBehavioral Design Patterns
Behavioral Design Patterns
 
Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621
 
Command and Adapter Pattern
Command and Adapter PatternCommand and Adapter Pattern
Command and Adapter Pattern
 
Programming in c#
Programming in c#Programming in c#
Programming in c#
 
C# Tutorial
C# Tutorial C# Tutorial
C# Tutorial
 

Similar to Iterator Pattern

Java class 5
Java class 5Java class 5
Java class 5
Edureka!
 
Iterarators and generators in python
Iterarators and generators in pythonIterarators and generators in python
Iterarators and generators in python
Sarfaraz Ghanta
 
Collections
CollectionsCollections
More topics on Java
More topics on JavaMore topics on Java
More topics on Java
Ahmed Misbah
 
Java Tutorials
Java Tutorials Java Tutorials
Java Tutorials
Woxa Technologies
 
Dynamic Python
Dynamic PythonDynamic Python
Dynamic Python
Chui-Wen Chiu
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2
Ed Charbeneau
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platforms
Kirill Rozov
 
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ....NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
NETFest
 
Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...
Simplilearn
 
Java Advanced Features
Java Advanced FeaturesJava Advanced Features
Java Advanced Features
Michael Redlich
 
Data structures
Data structuresData structures
Data structures
Manaswi Sharma
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
Jacek Laskowski
 
Python internals and how they affect your code - kasra ahmadvand
Python internals and how they affect your code - kasra ahmadvandPython internals and how they affect your code - kasra ahmadvand
Python internals and how they affect your code - kasra ahmadvand
irpycon
 
java training faridabad
java training faridabadjava training faridabad
java training faridabad
Woxa Technologies
 
Pythonintroduction
PythonintroductionPythonintroduction
Pythonintroduction
-jyothish kumar sirigidi
 
Programming with Python - Week 3
Programming with Python - Week 3Programming with Python - Week 3
Programming with Python - Week 3
Ahmet Bulut
 
Object Oriented Programming Concepts using Java
Object Oriented Programming Concepts using JavaObject Oriented Programming Concepts using Java
Object Oriented Programming Concepts using Java
Glenn Guden
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
thnetos
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
Baishampayan Ghose
 

Similar to Iterator Pattern (20)

Java class 5
Java class 5Java class 5
Java class 5
 
Iterarators and generators in python
Iterarators and generators in pythonIterarators and generators in python
Iterarators and generators in python
 
Collections
CollectionsCollections
Collections
 
More topics on Java
More topics on JavaMore topics on Java
More topics on Java
 
Java Tutorials
Java Tutorials Java Tutorials
Java Tutorials
 
Dynamic Python
Dynamic PythonDynamic Python
Dynamic Python
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platforms
 
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ....NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
 
Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...
 
Java Advanced Features
Java Advanced FeaturesJava Advanced Features
Java Advanced Features
 
Data structures
Data structuresData structures
Data structures
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
 
Python internals and how they affect your code - kasra ahmadvand
Python internals and how they affect your code - kasra ahmadvandPython internals and how they affect your code - kasra ahmadvand
Python internals and how they affect your code - kasra ahmadvand
 
java training faridabad
java training faridabadjava training faridabad
java training faridabad
 
Pythonintroduction
PythonintroductionPythonintroduction
Pythonintroduction
 
Programming with Python - Week 3
Programming with Python - Week 3Programming with Python - Week 3
Programming with Python - Week 3
 
Object Oriented Programming Concepts using Java
Object Oriented Programming Concepts using JavaObject Oriented Programming Concepts using Java
Object Oriented Programming Concepts using Java
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 

More from melbournepatterns

An Introduction to
An Introduction to An Introduction to
An Introduction to
melbournepatterns
 
State Pattern from GoF
State Pattern from GoFState Pattern from GoF
State Pattern from GoF
melbournepatterns
 
Concurrency Patterns
Concurrency PatternsConcurrency Patterns
Concurrency Patterns
melbournepatterns
 
Continuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and FlotContinuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and Flot
melbournepatterns
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
melbournepatterns
 
Code Contracts API In .Net
Code Contracts API In .NetCode Contracts API In .Net
Code Contracts API In .Net
melbournepatterns
 
LINQ/PLINQ
LINQ/PLINQLINQ/PLINQ
LINQ/PLINQ
melbournepatterns
 
Gpu Cuda
Gpu CudaGpu Cuda
Facade Pattern
Facade PatternFacade Pattern
Facade Pattern
melbournepatterns
 
Phani Kumar - Decorator Pattern
Phani Kumar - Decorator PatternPhani Kumar - Decorator Pattern
Phani Kumar - Decorator Pattern
melbournepatterns
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
melbournepatterns
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
melbournepatterns
 
Prototype Design Pattern
Prototype Design PatternPrototype Design Pattern
Prototype Design Pattern
melbournepatterns
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
melbournepatterns
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
melbournepatterns
 
A Little Lisp
A Little LispA Little Lisp
A Little Lisp
melbournepatterns
 
State Pattern in Flex
State Pattern in FlexState Pattern in Flex
State Pattern in Flex
melbournepatterns
 
Active Object
Active ObjectActive Object
Active Object
melbournepatterns
 
Extract Composite Talk Andy
Extract Composite Talk AndyExtract Composite Talk Andy
Extract Composite Talk Andy
melbournepatterns
 
Selenium Interpreter
Selenium InterpreterSelenium Interpreter
Selenium Interpreter
melbournepatterns
 

More from melbournepatterns (20)

An Introduction to
An Introduction to An Introduction to
An Introduction to
 
State Pattern from GoF
State Pattern from GoFState Pattern from GoF
State Pattern from GoF
 
Concurrency Patterns
Concurrency PatternsConcurrency Patterns
Concurrency Patterns
 
Continuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and FlotContinuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and Flot
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
 
Code Contracts API In .Net
Code Contracts API In .NetCode Contracts API In .Net
Code Contracts API In .Net
 
LINQ/PLINQ
LINQ/PLINQLINQ/PLINQ
LINQ/PLINQ
 
Gpu Cuda
Gpu CudaGpu Cuda
Gpu Cuda
 
Facade Pattern
Facade PatternFacade Pattern
Facade Pattern
 
Phani Kumar - Decorator Pattern
Phani Kumar - Decorator PatternPhani Kumar - Decorator Pattern
Phani Kumar - Decorator Pattern
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Prototype Design Pattern
Prototype Design PatternPrototype Design Pattern
Prototype Design Pattern
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
 
A Little Lisp
A Little LispA Little Lisp
A Little Lisp
 
State Pattern in Flex
State Pattern in FlexState Pattern in Flex
State Pattern in Flex
 
Active Object
Active ObjectActive Object
Active Object
 
Extract Composite Talk Andy
Extract Composite Talk AndyExtract Composite Talk Andy
Extract Composite Talk Andy
 
Selenium Interpreter
Selenium InterpreterSelenium Interpreter
Selenium Interpreter
 

Iterator Pattern

  • 1. Iterator  Design  Pa.ern   Stewart  Gleadow   University  of  Melbourne  
  • 2. Intent   •  “Provide  a  way  to  access  the  elements  of  an   aggregate  object  sequen>ally  without   exposing  its  underlying  representa>on”                  –  GoF  
  • 3. Mo3va3on   •  Hide  implementa3on  details   •  Allow  for  different  traversals   •  Separate  traversal  code  from  the  list  itself  
  • 4. Basic  Structure   List Iterator count() first() add(Item) next() remove(Item) isDone() Item get(int index) Item currentItem() •  Provide  List  to  Iterator  (3ghtly  coupled)   •  Iterator  keeps  a  Cursor  to  current  loca3on  
  • 5. Structure   Aggregate Iterator createIterator() first() next() isDone() Item currentItem() ConcreteAggregate ConcreteIterator createIterator() return new ConcreteIterator(this)
  • 6. Types  of  Iterators   •  External:  client  controls  the  itera3on   •  Internal:  iterator  controls  itera3on   •  anonymous  func3ons   •  closures  /  blocks  
  • 7. Applicability   •  List  processing  &  selec3on   •  Tree  traversals.  eg.  depth  first   •  Syntax  trees  -­‐>  Interpreter?  
  • 8. Concurrency   •  hasNext()  or  !isDone()  implies  subsequent  call   to  currentItem()  will  pass   •  Iterators  get  a  copy  of  the  data?   •  Iterators  keep  track  of  modifica3ons?  
  • 9. External  (Java)   Iterator<MyType> iter = list.iterator();! while(iter.hasNext())! !System.out.println(iter.next());! // OR! for(MyType item : list)! !System.out.println(item);!
  • 10. External  (Ruby)   for item in list! !puts item! end! // OR! list.each { |item| puts item }!
  • 11. Internal  (Java)   public abstract class Internal<T> {! !private Iterator<T> iter;! public void traverse() {! for(T item : iter)! process(item);! }! protected abstract process(T item);! }!
  • 12. Internal  (Java)   Iterator<T> iter = list.iterator();! Internal<T> internal = new Internal<T>(iter)! {! !protected void process(T item) {! ! ! !if(condition)! ! ! ! !System.out.println(item);! !}! };!
  • 13. Internal  (Ruby)   list.each { |item| puts item if condition }!