设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用手对数据进行分页处理。绘制对应的类图并编程模拟实现。

(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));
        }
    }

    @Override
    public AbstractIterator createIterator() {
        return new MyIterator();
    }

    private class MyIterator implements AbstractIterator {
        private Aggregate aggregate;
        private int currentPage;  //当前页号
        private int num;  //每页个数


        //分页输出的方法  a表示每页的数量  ,b表示页号
        @Override
        public 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("我是有底线的——————————————————————");
                }
            }
        }

        @Override
        public 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("当以已是最后一页!");
            }

        }

        @Override
        public 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);

    }
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐