基于对象适配器模式的分页组件

来源:互联网 发布:网络大专能考本科么 编辑:程序博客网 时间:2024/06/06 12:42
只包含源代码

package org.sl.mulitPage.bean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * 分页<br>
 * 实现基础分页操作
 * @serial
 * @author sl
 *
 * @param <V> 任何值
 */
public class BaseMulitPage<V> implements BaseMultPageOperation{
    private List<V> dataList = null;
    private int pageDispRowSize = 0;
       
    /**
     * 构造一个多页对象
     * @param dataList 所有记录
     * @param _pageDispRowSize 每页允许显示的记录数
     */
    public BaseMulitPage(V[] datas, int pageDispRowSize){
        this.dataList = new ArrayList<V>(datas.length);
        dataList.addAll(Arrays.asList(datas));
        setPageDispRowSize(pageDispRowSize);
    }
   
    /**
     * 构造一个多页对象
     * @param dataList 所有记录
     * @param _pageDispRowSize 每页允许显示的记录数
     */
    public BaseMulitPage(List<V> dataList, int pageDispRowSize){
        this.dataList = dataList;
        setPageDispRowSize(pageDispRowSize);
    }
   
    /**
     * 设置每页显示的记录数
     * @param _pageDispRowSize
     */
    public void setPageDispRowSize(int _pageDispRowSize){
        if(_pageDispRowSize < 1){
            throw new RuntimeException("page display row size < 1");
        }
        pageDispRowSize = _pageDispRowSize;
    }
   
    /**
     * 返回每页允许显示的记录数<br>
     * 此返回值不能<1
     * @return 每页允许显示的记录数
     */
    public int getPageDispRowSize(){
        return pageDispRowSize;
    }
   
    /**
     * 返回指定页的记录列表
     * @param pageNumber 指定的页号<br>
     * 此页号必需满足:1<=pageNumber && pageNumber<=getPageCount()<br>
     * 首页:1 尾页:getPageCount()
     * 
     * @return 记录列表,若此页号无法通过checkPageNumber()方法则返回null
     */
    public List getPageNumberRows(int pageNumber){
        int dataListSize = 0;
        List<V> pageRowList = null;
        int jumpRowCount = 0;
       
        if(checkPageNumber(pageNumber)){           
            jumpRowCount = (pageNumber - 1) * pageDispRowSize ;
            dataListSize = getRowSize();
            pageRowList = new ArrayList<V>(pageDispRowSize);
           
            for(int i = jumpRowCount, ii = 0; i < dataListSize && ii < pageDispRowSize; i++, ii++){
                pageRowList.add(dataList.get(i));
            }
        }else{
//            pageRowList = new ArrayList<V>(0);
        }
        return pageRowList;
    }
   
    /**
     * 返回总页数<br>
     * @return 总页数
     */
    public int getPageCount(){       
        int dataListSize = 0;
        int pageCount = 0;       
       
        if(null != dataList){
            dataListSize = getRowSize();
           
            if(dataListSize > pageDispRowSize){
                pageCount = dataListSize / pageDispRowSize;
                pageCount += dataListSize % pageDispRowSize > 0? 1 : 0;
            }else{
                pageCount = 1;
            }
        }else{
            pageCount = 0;
        }
       
        return pageCount;
    }
   
   
    /**
     * 返回总记录数
     * @return
     */
    public int getRowSize(){
        return this.dataList.size();
    }
   
    /**
     * 检查页号是否溢出<br>
     * 1 <= pageNumber && pageNumber <= getPageCount()
     * @param pageNumber 页号
     * @return
     */
    protected boolean checkPageNumber(int pageNumber){
        return 1 <= pageNumber && pageNumber <= getPageCount();
    }
}
--------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
 * 基础分页操作 
 * @author sl
 *
 */
public interface BaseMultPageOperation {
    /**
     * 返回每页允许显示的记录数
     * @return 每页允许显示的记录数
     */
    int getPageDispRowSize();
   
    /**
     * 返回指定页的记录列表
     * @param pageNumber 指定的页号<br>
     * 此页号必需满足:1<=pageNumber && pageNumber<=getPageCount()<br>
     * 首页:1 尾页:getPageCount()
     * 
     * @return 记录列表,若此页号无法通过checkPageNumber()方法则返回null
     */
    List getPageNumberRows(int pageNumber);
   
    /**
     * 返回总页数<br>
     * 1为第一页,此方法返回值为尾页
     * @return 总页数
     */
    int getPageCount();
   
    /**
     * 返回总记录数
     * @return
     */
    int getRowSize();
}
--------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
 * 此类为MulitPage的扩展<br>
 * 对象适配器模式
 * @serial
 * @author sl
 * @param <V> 任何值
 */
public class MoreMultPage<V> implements MoreMultPageOperation{
    private BaseMulitPage baseMulitPage = null;

    @SuppressWarnings("unchecked")
    public MoreMultPage(List<V> dataList, int pageDispRowSize) {
        this.baseMulitPage = new BaseMulitPage(dataList, pageDispRowSize);
    }
   
    @SuppressWarnings("unchecked")
    public MoreMultPage(V[] datas, int pageDispRowSize){
        this.baseMulitPage = new BaseMulitPage(datas, pageDispRowSize);
    }

    /**
     * 首页
     */
    @SuppressWarnings("unchecked")
    public List<V> getTopPageRow() {
        return baseMulitPage.getPageNumberRows(1);
    }

    /**
     * 上一页
     *
     * @param nowPageNumber
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<V> previousPage(int nowPageNumber) {
        return baseMulitPage.getPageNumberRows(nowPageNumber - 1);
    }

    /**
     * 下一页
     *
     * @param nowPageNumber
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<V> nextPage(int nowPageNumber) {
        return baseMulitPage.getPageNumberRows(nowPageNumber + 1);
    }

    /**
     * 尾页
     */
    @SuppressWarnings("unchecked")
    public List<V> getEndPageRow() {
        return baseMulitPage.getPageNumberRows(baseMulitPage.getPageCount());
    }

    public int getPageCount() {
        return baseMulitPage.getPageCount();
    }

    public int getPageDispRowSize() {
        return baseMulitPage.getPageDispRowSize();
    }

    public List getPageNumberRows(int pageNumber) {
        return baseMulitPage.getPageNumberRows(pageNumber);
    }

    public int getRowSize() {
        return baseMulitPage.getRowSize();
    }
}
----------------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
 * 扩展分页操作
 * @author sl
 *
 */
public interface MoreMultPageOperation extends BaseMultPageOperation{
    /**
     * 首页
     * @return
     */
    List getTopPageRow();
   
    /**
     * 上一页
     * @param nowPageNumber 当前页号
     * @return
     */
    List previousPage(int nowPageNumber);
   
    /**
     * 下一页
     * @param nowPageNumber 当前页号
     * @return
     */
    List nextPage(int nowPageNumber);
   
    /**
     * 尾页
     * @return
     */
    List getEndPageRow();
}
-------------------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
 * 抽象多页类<br>
 * 子类一般实现此类方法便可以实现分页<br>
 * 代理模式
 * @author sl
 *
 * @param <V>
 */
public abstract class AbstractMultPage<V> implements MoreMultPageOperation {
    protected List<V> dataList = null;
    protected int pageDispRowSize = 0;
    protected MoreMultPage moreMulitPage = null;
   
    public AbstractMultPage(){
        this.pageDispRowSize = 5;
    }
    public AbstractMultPage(int pageDispRowSize){
        this.pageDispRowSize = pageDispRowSize;
    }
   
    @SuppressWarnings("unchecked")
    protected MoreMultPage getMoreMultPage(){
        if(null == dataList){
            dataList = getRow();
        }
       
        if(moreMulitPage == null){
            moreMulitPage = new MoreMultPage(dataList, pageDispRowSize);
        }
        return moreMulitPage;
    }
   
    protected abstract List<V> getRow();
   
    public void setPageDispRowSize(int pageDispRowSize){
        this.pageDispRowSize = pageDispRowSize;
    }
       
    public List getEndPageRow() {       
        return getMoreMultPage().getEndPageRow();
    }

    @SuppressWarnings("unchecked")
    public List<V> getTopPageRow() {       
        return getMoreMultPage().getTopPageRow();
    }

    @SuppressWarnings("unchecked")
    public List<V> nextPage(int nowPageNumber) {
        return getMoreMultPage().nextPage(nowPageNumber);
    }

    @SuppressWarnings("unchecked")
    public List<V> previousPage(int nowPageNumber) {
        return getMoreMultPage().previousPage(nowPageNumber);
    }

    public int getPageCount() {
        return getMoreMultPage().getPageCount();
    }

    public int getPageDispRowSize() {
        return getMoreMultPage().getPageDispRowSize();
    }

    @SuppressWarnings("unchecked")
    public List<V> getPageNumberRows(int pageNumber) {
        return getMoreMultPage().getPageNumberRows(pageNumber);
    }

    public int getRowSize() {
        return getMoreMultPage().getRowSize();
    }

}