设计模式_迭代器模式
来源:互联网 发布:美少女梦工厂 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
- 设计模式_迭代器模式
- 设计模式_迭代器模式
- 大话设计模式_迭代器模式
- 设计模式_迭代器模式(C++)
- java设计模式16_迭代器模式
- 设计模式_工厂模式
- 设计模式_策略模式
- 设计模式_观察者模式
- 设计模式_策略模式
- 设计模式_代理模式
- 设计模式_命令模式
- 设计模式_状态模式
- 设计模式_策略模式
- 设计模式_工厂模式
- 设计模式_代理模式
- 设计模式_原型模式
- 设计模式_命令模式
- 设计模式_装饰模式
- 使用SWING组件创建数据库应用程序
- 二维数组动态分配空间
- hdu1102
- 输入数字n,顺序打印出1到n位的十进制最大数
- JavaEE体系架构概述
- 设计模式_迭代器模式
- java学习之C语言基础2
- 防止qq代码攻击 (linkey)
- 查找
- poj2318(叉积判断点的位置+二分查找)
- DBMS_JOB
- Web部署一(目录机构以及Url-pattern)
- MYSQL修改密码的几种方式
- flask 静态文件 模版