浏览 1514 次
锁定老帖子 主题:怎么重构
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-22
最后修改:2009-07-23
今天下定决心弄明白je的分页.捣鼓了快一个小时才弄明白规律. 用最笨的方法写了个类好长好长..大家看着不要眼晕.. 我就发其中的一段代码了.刚才发现发太多.浏览器直接崩了.. 我就不发原版了.太长了有600行了. 大家看代码就可以了.在附件page.java.rar中 我这里就不写了
就是这么个东西.我看着也眼晕.所以就想好好改下(美其名曰:重构)
改成下面的 (重构版)
package com.smallq.util; import java.util.ArrayList; import java.util.List; public class RefactorPage { public static void main(String[] args) { List<String> l = RefactorPage.getPageHref(7, 4, "pageAction.do?page"); for (String s : l) { System.out.println(s); } } /** * 分页链接显示 * * @param totalPage * @param page * @param url * @return */ public static List<String> getPageHref(int totalPage, int page, String url) { List<String> list = new ArrayList<String>(); list.add("<div class='pagination'>"); page = checkOutPage(totalPage, page, url, list); if (totalPage < 7) { outAll(totalPage, page, url, list); } else if (totalPage == 7 || totalPage == 8) { totalPageSevenEight(totalPage, page, url, list); } else { greatThanEight(totalPage, page, url, list); } checkEndPage(totalPage, page, url, list); list.add("</div>"); return list; } private static void checkEndPage(int totalPage, int page, String url, List<String> list) { if (page != totalPage) { list.add(" <a href=" + url + "=" + (page + 1) + " class='next_page' rel='next'>下一页 »</a>"); } else { list.add(" <span class='disabled next_page'>下一页 »</span>"); } } private static int checkOutPage(int totalPage, int page, String url, List<String> list) { if (page < 1) page = 1; if (page > totalPage) page = totalPage; if (page != 1) { list.add("<a href=" + url + "=" + (page - 1) + " class='prev_page' rel='prev start'>« 上一页</a> "); } else { list.add("<span class='disabled prev_page'>« 上一页</span> "); } return page; } private static void greatThanEight(int totalPage, int page, String url, List<String> list) { if (page < 3) { previousTwoPage(page, url, list); addFootPage(totalPage, url, list); } else if (page > totalPage - 2) { addHeadPage(url, list); lastTwoPage(totalPage, page, url, list); } else if (page == 3) { thirdPage(page, url, list); addFootPage(totalPage, url, list); } else if (page == totalPage - 2) { countDownThirdPage(totalPage, page, url, list); } else if (page == 4) { forthPage(page, url, list); addFootPage(totalPage, url, list); } else if (page == totalPage - 3) { addHeadPage(url, list); countDownForthPage(totalPage, page, url, list); } else if (page == 5) { fifthPage(page, url, list); addFootPage(totalPage, url, list); } else if (page == totalPage - 4) { addHeadPage(url, list); countDownFifthPage(totalPage, page, url, list); } else { addHeadPage(url, list); // 中间 list.add("<a href=" + url + "=" + (page - 1) + ">" + (page - 1) + "</a>"); list.add("<span class='current'>" + page + "</span>"); list.add("<a href=" + url + "=" + (page + 1) + ">" + (page + 1) + "</a>"); // 后段 addFootPage(totalPage, url, list); } } private static void totalPageSevenEight(int totalPage, int page, String url, List<String> list) { if (page < 3) { previousTwoPage(page, url, list); addFootPage(totalPage, url, list); } else if (page > totalPage - 2) { addHeadPage(url, list); lastTwoPage(totalPage, page, url, list); } else if (page == 3 && totalPage == 8) { thirdPage(page, url, list); addFootPage(totalPage, url, list); } else if (page == totalPage - 2 && totalPage == 8) { countDownThirdPage(totalPage, page, url, list); } else { outAll(totalPage, page, url, list); } } private static void outAll(int totalPage, int page, String url, List<String> list) { for (int i = 0; i < totalPage; i++) { if (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; if (page == totalPage) break; } list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>"); } } private static void previousTwoPage(int page, String url, List<String> list) { for (int i = 0; i < 3; i++) { i = iteratorOutPut(page, url, list, i); } } private static void lastTwoPage(int totalPage, int page, String url, List<String> list) { for (int i = totalPage - 3; i < totalPage; i++) { if (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; if (page == totalPage) break; } list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>"); } } private static void thirdPage(int page, String url, List<String> list) { for (int i = 0; i < 4; i++) { i = iteratorOutPut(page, url, list, i); } } private static void countDownThirdPage(int totalPage, int page, String url, List<String> list) { addHeadPage(url, list); for (int i = totalPage - 4; i < totalPage; i++) { if (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; if (page == totalPage) break; } list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>"); } } private static void forthPage(int page, String url, List<String> list) { for (int i = 0; i < 5; i++) { i = iteratorOutPut(page, url, list, i); } } private static void countDownForthPage(int totalPage, int page, String url, List<String> list) { for (int i = totalPage - 5; i < totalPage; i++) { if (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; if (page == totalPage) break; } list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>"); } } private static void countDownFifthPage(int totalPage, int page, String url, List<String> list) { for (int i = totalPage - 6; i < totalPage; i++) { if (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; if (page == totalPage) break; } list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>"); } } private static void fifthPage(int page, String url, List<String> list) { for (int i = 0; i < 6; i++) { i = iteratorOutPut(page, url, list, i); } } private static int iteratorOutPut(int page, String url, List<String> list, int i) { while (i + 1 == page) { list.add("<span class='current'>" + page + "</span>"); i = i + 1; } list.add("<a href=" + url + "=" + (i + 1) + " rel='next'>" + (i + 1) + "</a>"); return i; } private static void addFootPage(int totalPage, String url, List<String> list) { list.add(" <span class='gap'>…</span> "); list.add("<a href=" + url + "=" + (totalPage - 1) + ">" + (totalPage - 1) + "</a>"); list.add("<a href=" + url + "=" + (totalPage) + ">" + (totalPage) + "</a>"); } private static void addHeadPage(String url, List<String> list) { list.add("<a href=" + url + "=" + (1) + ">" + (1) + "</a>"); list.add("<a href=" + url + "=" + (2) + ">" + (2) + "</a>"); list.add(" <span class='gap'>…</span> "); } }
上面是重构过的.代码行数减少一半有 我想问下.还能继续go不?
还有我的分页想法就貌似不对. 大家看看 下面是个例子.里面有两个类.一个是原始的.一个是重构过的.. 貌似是过度设计了.能改善算法的.尽量改改.怎么重构?怎么就叫过度设计了.这个度怎么把握? 看着代码减少了.看着更晕了.. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |