设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用手对数据进行分页处理。绘制对应的类图并编程模拟实现。
(1)绘制类图
(2)代码实现
AbstractAggregate类:
package lib6.iterator;public interface AbstractAggregate {AbstractIterator createIterator();
}
AbstractIterator类:
package lib6.iterator;public interface AbstractIterator {public void paging(int a, int b);public void nextPage();public void previousPage();
}
Aggregate类(包含内部类MyIterator):
package lib6.iterator;import java.util.ArrayList;public class Aggregate implements AbstractAggregate {private ArrayList<String> names;public Aggregate() {names = new ArrayList<String>();for (int i = 0; i < 100; i++) {names.add(i, "用户" + (i + 1));}}@Overridepublic AbstractIterator createIterator() {return new MyIterator();}private class MyIterator implements AbstractIterator {private Aggregate aggregate;private int currentPage; //当前页号private int num; //每页个数//分页输出的方法 a表示每页的数量 ,b表示页号@Overridepublic void paging(int a, int b) {num = a;currentPage = b;if (names.size() % a == 0 && b >= (names.size() / a + 1)) {System.out.println("您查看的页内容为空!");} else if (names.size() % a != 0 && b >= (names.size() / a + 2)) {System.out.println("您查看的页内容为空!");} else {try {for (int i = ((b - 1) * a); i < (((b - 1) * a) + a); i++) {System.out.println(names.get(i));}} catch (Exception e) {System.out.println("我是有底线的——————————————————————");}}}@Overridepublic void nextPage() {try {for (int i = num * currentPage; i < num * currentPage + num; i++) {System.out.println(names.get(i));}currentPage += 1;} catch (Exception e) {System.out.println("当以已是最后一页!");}}@Overridepublic void previousPage() {if (currentPage == 1) {System.out.println("当前已是第一页!");} else {for (int i = num * currentPage - (2 * num); i < num * currentPage - num; i++) {System.out.println(names.get(i));}currentPage -= 1;}}}}
用户类Client:
package lib6.iterator;public class Client {public static void display(AbstractAggregate abstractAggregate){AbstractIterator i = abstractAggregate.createIterator();System.out.println("分页==========");i.paging(3,27);System.out.println("当前页的上一页=========");i.previousPage();System.out.println("当前页的下一页==========");i.nextPage();}public static void main(String[] args) {AbstractAggregate aa;aa = new Aggregate();display(aa);}
}