Software design - Lecture 39. The main topics covered in this chapter include: behavioral patterns; category of patterns are concerned with algorithms and assignments of responsibilities between objects; describe not just patterns of objects or classes but also the pattern of communication between them;...
1 Software Design Lecture : 39 Category 3: Behavioral Patterns This category of patterns are concerned with algorithms and assignments of responsibilities between objects They describe not just patterns of objects or classes but also the pattern of communication between them 3 Behavioral Design Patterns This category will shift the focus from flow of control to concentrate just on the way objects are interconnected These patterns are concerned with the assignment of responsibilities between objects, or, encapsulating behavior in an object and delegating requests to it. Iterator Design Pattern OR Well Managed Collection Motivation for Iterator Design Pattern There are different data structure to store data or objects in a collection ie Array, Array list , Vector, stack, link list etc In other words there are different container which contain different object and to access the content of each container different mechanism is applied 6 Array Vs Vector Arrays are Static data structure Vectors are dynamic data structure Arrays are data type specific Vector contains a dynamic list of references to other objects Since size is fixed memory is allocated for array Due to dynamic behavior Vectors are memory efficient way of storing data Internal Iterator Cursor The collection itself offers methods to allow a client to visit different objects within the collection. For example, the java.util.ResultSet class contains the data and also offers methods such as next() to navigate through the item list There can be only one iterator on a collection at any given time The collection has to maintain or save the state of iteration 8 External Iterators The iteration functionality is separated from the collection and kept inside a different object referred to as an iterator Typical example include Vector in which elements are stored inside vector but are traversed using Enumeration for instance as shown in the example in next slide 9 import java.util.*; public class Program { public static void main(String[] args) { Vector v = new Vector(); v.add(0, "Apple"); v.add(1, "Orange"); v.add(2, "Banana"); //Assigning Vector to Iterator Enumeration vEnum = v.elements(); while (vEnum.hasMoreElements()) { System.out.println(vEnum.nextElement()); }}} 10 Output of the Program Apple Orange Banana 11 Iterator Pattern Defined “The Iterator Design pattern provides a way to access the element of aggregate object sequentially without knowing it’s underlying representation” 12 Intend of Iterator Design Pattern Allows a client object to access the contents of a container in a sequential manner, without having any knowledge about the internal representation of its contents Client should not be involved in the internal traversal of the contents of the container 13 Discussion on Iterator Design Pattern Uniform method of accessing elements of collection without knowing the underlying representation We can write polymorphic code to access the elements of underlying aggregate objects 14 Key idea behind Iterator The idea is to take out the responsibility for access and traversal out of the collection and put them in the Iterator Object Iterator class will define an interface for accessing the element of the collection 15 Iterator pattern The abstraction provided by the Iterator pattern allows you to modify the collection implementation without making any changes outside of collection. It enables you to create a general purpose GUI component that will be able to iterate through any collection of the application. 16 Classes in Iterator Pattern The Iterator pattern suggests that a Container object should be designed to provide a public interface in the form of an Iterator object for different client objects to access its contents An Iterator object contains public methods to allow a client object to navigate through the list of objects within the container 17 Class Diagram of Iterator Design Pattern 18 19 20 Consequences Benefits i Simplifies the interface of the Aggregate by not polluting it with traversal methods ii.Supports multiple, concurrent traversals iii.Supports variant traversal techniques Liabilities None! 21 Example This example is using a collection of books and it uses an iterator to iterate through the collection 22 Class Diagram 23 interface IIterator { public boolean hasNext(); public Object next(); } interface IContainer { public IIterator createIterator(); } 24 class BooksCollection implements IContainer { private String m_titles[] = {"Design Patterns","1","2","3","4"}; public IIterator createIterator() { BookIterator result = new BookIterator(); return result; } 25 private class BookIterator implements IIterator { private int m_position; public boolean hasNext() { if (m_position