现在的位置: 首页 > 综合 > 正文

Java设计模式之:Iterator链表模式

2013年09月08日 ⁄ 综合 ⁄ 共 1909字 ⁄ 字号 评论关闭

先来了解一下链表模式的原理:

首先写一个JavaBean,内容是要添加的元素和该元素的节点。

public class NodeBean implements Serializable
{
   
    private Object data; //元素本身
    private NodeBean next; //下一个节点
   
    public Object getData()
    {
        return data;
    }
   
    public void setData(Object data)
    {
        this.data = data;
    }
   
    public NodeBean getNext()
    {
        return next;
    }
   
    public void setNext(NodeBean next)
    {
        this.next = next;
    }
   
    public NodeBean(Object data, NodeBean next)
    {
        this.data = data;
        this.next = next;
    }
   
    public NodeBean()
    {
       
    }
   
    public String toString()
    {
        return data + " " + next;
    }
   
}

接下来,编写一个Iterator类,比如我的类名是IteratorLinkedModel,它具有一些功能性的方法,这里我们介绍添加的方法。同时它里面装入了许多个节点,包括起始节点和结束节点。

public class IteratorLinkedModel
{
   
    //起始节点
    NodeBean head = null;
   
    //计数器,记录当前链表里有多少个元素
    int size = 0;
   
    //当我们添加新元素的时候,如果知道哪个元素是最后的一个,
    //就可以让原来最后一个的元素的节点指向新添加那个元素的节点了,
    //所以这里申明一个结束节点,初始值也是空
    NodeBean tail = null;
   
    //往链表里添加元素的方法
    public Object add(Object o)
    {
        //new一个Node,传入数据本身,初始next是没有的,所以传个空值
        NodeBean nb = new NodeBean(o,null);
       
       
        //先做个判断,head是否为空
        if(head == null)
        {
            //如何head是空,那么说明当前是第在一个节点上,
            //把head的引用指向刚才新构造的那个Node对象
            head = nb;
           
            //如果head是nb,那么tail也应该是nb,
            //也就是说第一个节点即是龙头也是龙尾
            tail = nb;   
        }
        else
        {
            //其他情况,如果head不等于空,也就是说不是第一个节点
            //那么把最后一个节点指向新添加的那个节点
            tail.setNext(nb);
           
            //同时tail本身应该变成我们新加进来的那个节点
            tail = nb;           
        }
       
        //只要有新的节点加了进来,计数器就开始累加
        size ++;
       
        return o;
    }
   
    //返回计数结果
    public int size()
    {
        return size;
    }
   
}


最后编写一个测试类,试一下

public class Test
{

    static Object o;
   
    public static void main(String[] args)
    {
        IteratorLinkedModel ilm = new IteratorLinkedModel();
        for(int i=1; i<5; i++)
        {
            o = ilm.add(i);
            System.out.println(o);
        }

        System.out.println("计数器结果:" + ilm.size());
    }

}

最后打印出来对象里的内容:1、2、3、4,以及计数器结果:4  OK!成功!

抱歉!评论已关闭.