论坛首页 Java企业应用论坛

怎么重构

浏览 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'>下一页 &raquo;</a>");
		} else {
			list.add(" <span class='disabled next_page'>下一页 &raquo;</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'>&laquo; 上一页</a> ");
		} else {
			list.add("<span class='disabled prev_page'>&laquo; 上一页</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'>&hellip;</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'>&hellip;</span> ");
	}
}

 

 

 

上面是重构过的.代码行数减少一半有

 我想问下.还能继续go不?

 

还有我的分页想法就貌似不对.

大家看看

下面是个例子.里面有两个类.一个是原始的.一个是重构过的..

貌似是过度设计了.能改善算法的.尽量改改.怎么重构?怎么就叫过度设计了.这个度怎么把握?

 看着代码减少了.看着更晕了..

  • PageTest.rar (10.7 KB)
  • 描述: 完整例子.放到tomcat目录下可运行
  • 下载次数: 12
  • RefactorPage.java.rar (1.3 KB)
  • 描述: 经过第一次重构的类,上面发的是又改造的
  • 下载次数: 14
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics