|
//采用内部类的方式进行了实现,但是由于画在里面让关系不是很清楚,我就画在了外面,在这里内部类的使用和没使用内部类的效果是相同的
代码如下:
设计代码:
// 主要为实现分页效果,其他小方法就不实现了
abstract class iterator {
public abstract Object[] paging(int count);// 分页,count:返回多少个元素
public abstract void allpaging(int count);
public abstract Object next();
public abstract boolean hasnext();
}
abstract class product {
protected LinkedList linkedList;
public product(LinkedList ll) {
this.linkedList = ll;
}
public abstract LinkedList getlist();
public abstract iterator iterator();
}
class productconcrete extends product {
public productconcrete(LinkedList ll) {
super(ll);
// TODO 自动生成的构造函数存根
}
@Override
public LinkedList getlist() {
// TODO 自动生成的方法存根
return linkedList;
}
// 创建一个迭代器
public iterator iterator() {
return new iteratorconcrete(this);
}
// 内部类,专门负责逐页迭代器的管理
class iteratorconcrete extends iterator {
private productconcrete pc;
// 在这里坐着随机采用了一种数据结构linked,这是一种首尾链表,如果感兴趣的大家就可以去研究一下
// 在这里我把Linkedlist当做普通的arraylist来使用,所以存在cusour,虽然性能上可能并不好,但是没关系
private int cusuor;
private LinkedList linkedList;
public iteratorconcrete(productconcrete pc) {
// TODO 自动生成的构造函数存根
this.pc = pc;
linkedList = pc.getlist();
cusuor = 0;
}
@Override
public Object[] paging(int count) {
// TODO 自动生成的方法存根
ArrayList<Object> o = new ArrayList<>();
int index =0;
while (hasnext() && index<count) {
Object object = next();
o.add(object);
System.out.println(object);
index++;
}
return o.toArray();
}
@Override
public Object next() {
// TODO 自动生成的方法存根
if (hasnext()) {
cusuor++;
return linkedList.get(cusuor);
}
return null;
}
@Override
public boolean hasnext() {
// TODO 自动生成的方法存根
return cusuor < linkedList.size()-1;
}
@Override
public void allpaging(int count) {
// TODO 自动生成的方法存根
while(hasnext()){
System.out.println("----分页线----");
paging(count);
}
}
}
客户端代码:public class Client {
public static void main(String[] args) {
// TODO 自动生成的方法存根
LinkedList ll = new LinkedList<>();
ll.add(3);
ll.add("dfjkslfj");
ll.add("FDjksl");
ll.add(4535);
ll.add(3);
ll.add("dfjkslfj");
ll.add("FDjksl");
ll.add(4535);
ll.add(3);
ll.add("dfjkslfj");
ll.add("FDjksl");
ll.add(4535);
product product = new productconcrete(ll);
iterator iterator = product.iterator();
//进行单个分页
//Object[] o = iterator.paging(6);
//输出o即可
//进行全体分页
iterator.allpaging(3);
}
}