java模板方法在分页中的使用
?
??? 在日常的编程过程中,经常要处理数据集合。对数据集合处理一般采用下面的接口:
?
/** * 得到集合方法,传入当前页,和每页的大小 * * @param curpage * @param pagesize * @return */ public list<t> getlist(int curpage, int pagesize)?
int curpage = 1;int pagesize = 100;int count = xxxservice.getxxxcount();int lastpage = count / pagesize + 1;while (lastpage >= curpage) { list<xxxtype> lists = xxxxservice.getxxxxbyyyy(curpage,pagesize); if (lists == null) { break; } for (t obj : lists) {//对其中的一个进行处理 } curpage++;}?public interface listaction<t> { /** * 得到集合方法 * * @param curpage * @param pagesize * @return * @throws exception */ public list<t> getlist(int curpage, int pagesize) throws exception; /** * 处理一个对象 * * @param t * @throws exception */ public void process(t t) throws exception;}?public class overlistutil<t> { private int curpage = 1; private int pagesize = 100; private int lastpage = 1; public void overlist(int count, listaction<t> listation) throws exception { lastpage = count / pagesize + 1; while (lastpage >= curpage) { list<t> lists = listation.getlist(curpage, pagesize); for (t obj : lists) { listation.process(obj); } curpage++; } } /** * 得到当前处理的页 * * @return */ public int getcurpage() { return curpage; } public void setcurpage(int curpage) { this.curpage = curpage; } public int getpagesize() { return pagesize; } /** * 是否是最后一页 * * @return */ public boolean islastpage() { return curpage == lastpage; } /** * 设置每页要处理的数量,默认100 * * @param pagesize */ public void setpagesize(int pagesize) { this.pagesize = pagesize; }}? final int count = 5; final overlistutil<string> olu = new overlistutil<string>(); olu.setpagesize(10); olu.overlist(count, new listaction<string>() { @override public void process(string t) throws exception { // 这里是主要处理逻辑 system.out.println("正在处理第" + olu.getcurpage() + "页"); system.out.println("names:" + t); } @override public list<string> getlist(int curpage, int pagesize) throws exception { // 这里一般情况下只需要简单的调用服务即可 list<string> names = getservicenames(curpage, pagesize); return names; } // 下面这个模仿一个服务 private list<string> getservicenames(int curpage, int pagesize) { list<string> names = new arraylist<string>(); int lenght = 1; if (olu.islastpage()) { lenght = count - ((olu.getcurpage() - 1) * olu.getpagesize()); } else { lenght = olu.getpagesize(); } for (int i = 0; i < lenght; i++) { string s = string.valueof(math.random() * 100); names.add(s); } return names; } });?