(五)設計模式之迭代器模式(Iterator)
阿新 • • 發佈:2018-11-23
前言:
參考圖書:軟體設計模式與體系結構
參考部落格:https://www.cnblogs.com/wanson/articles/9277813.html
正題:
迭代器(iterator)有時又稱遊標(cursor)是程式設計的軟體設計模式,可在容器(container,例如連結串列或陣列)上遍訪的介面,設計人員無需關心容器的內容。
程式碼示例:
1 | MyIterator(interface) |
2 | MyConcreteIterator(class implements MyIterator) |
3 | MyList(interface) |
4 | MyConcreteList(class implements MyList) |
具體UML類圖如下:
具體程式碼:
MyIterator
package cn.gxm.mode;
public interface MyIterator {
public boolean hasNext();
public Object next();
}
MyConcreteIterator
package cn.gxm.mode; public class MyConcreteIterator implements MyIterator { private MyList list; private int index; public MyConcreteIterator(MyList list) { this.list = list; } @Override public boolean hasNext() { if(index < list.getSize()) { return true; } return false; } @Override public Object next() { return list.get(index++); } }
MyList
package cn.gxm.mode;
public interface MyList {
public int getSize();
public Object get(int index);
public void add(Object object);
public MyIterator iterateor();
}
myConcreteList
package cn.gxm.mode; public class myConcreteList implements MyList { private Object data[] = new Object[100]; private int index; private int size; @Override public int getSize() { return size; } @Override public Object get(int index) { return data[index]; } @Override public void add(Object object) { data[index++] = object; size++; } @Override public MyIterator iterateor() { return new MyConcreteIterator(this); } }
Client
package cn.gxm.mode;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
public class Client {
public static void main(String[] args) {
myConcreteList myList = new myConcreteList();
myList.add("str1");
myList.add("str2");
myList.add("str3");
MyIterator myIterator = myList.iterateor();
while(myIterator.hasNext()) {
System.out.println(myIterator.next());
}
}
}