设计模式_迭代器模式

来源:互联网 发布:美少女梦工厂 mac 编辑:程序博客网 时间:2024/04/29 00:07

    请自己动手写一个可以动态添加对象的容器
   考虑容器的可替换性


Iterator.java

package com.bjsxt.dp.iterator;public interface Iterator {Object next();boolean hasNext();}

Collection.java

package com.bjsxt.dp.iterator;public interface Collection { void add(Object o); int size(); Iterator iterator();}


 

ArrayList.java

package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.Collection;public class ArrayList implements Collection {Object[] objects = new Object[10];int index = 0;public void add(Object o) {if(index == objects.length) {Object[] newObjects = new Object[objects.length * 2];System.arraycopy(objects, 0, newObjects, 0, objects.length);objects = newObjects;}objects[index] = o;index ++;}public int size() {return index;}public Iterator iterator() {return new ArrayListIterator();}private class ArrayListIterator implements Iterator {private int currentIndex = 0;@Overridepublic boolean hasNext() {if(currentIndex >= index) return false;else return true;}@Overridepublic Object next() {Object o = objects[currentIndex];currentIndex ++;return o;}}}


Node.java

package com.bjsxt.dp.iterator;public class Node {public Node(Object data, Node next) {super();this.data = data;this.next = next;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}private Object data;private Node next;}


LinkedList.java

package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.Collection;public class LinkedList implements Collection {Node head = null;Node tail = null;int size = 0;public void add(Object o) {Node n = new Node(o, null);if(head == null) {head = n;tail = n;}tail.setNext(n); //tail原来的next是nulltail = n;size ++;}public int size() {return size;}@Overridepublic Iterator iterator() {return new LinkedListIterator();}private class LinkedListIterator implements Iterator {private int currentIndex=0;private Node currentNode=head;@Overridepublic boolean hasNext() {if(currentIndex >= size) return false;else return true;}@Overridepublic Object next() {Object o = currentNode.getData();currentNode=currentNode.getNext();currentIndex ++;return o;}}}

Cat.java

package com.bjsxt.dp.iterator;public class Cat {public Cat(int id) {super();this.id = id;}private int id;@Overridepublic String toString() {return "cat:" + id;}}


Test.java

package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.ArrayList;import com.bjsxt.dp.iterator.LinkedList;public class Test {public static void main(String[] args) {//ArrayList al = new ArrayList();//LinkedList al = new LinkedList();Collection c = new LinkedList();for(int i=0; i<15; i++) {c.add(new Cat(i));}System.out.println(c.size());Iterator it = c.iterator();while(it.hasNext()) {Object o = it.next();System.out.print(o + " ");}}}



 


 

0 0
原创粉丝点击