1. 程式人生 > >(五)設計模式之迭代器模式(Iterator)

(五)設計模式之迭代器模式(Iterator)

前言:

參考圖書:軟體設計模式與體系結構

參考部落格: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());
		}
	}

}