JAVA设计模式之【迭代器模式】

本文介绍迭代器模式的应用,包括如何将遍历数据的责任从聚合类中分离出来,并通过实例演示了电视机遥控器如何使用迭代器模式来遍历不同的电视频道。
迭代器模式
    聚合类,聚合对象
    电视机遥控器,迭代器,遍历局和对象中的成员
    灵活新增遍历方法
    将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离。这就是迭代器模式。
    灵活性,可扩展性,避免类职责过多
    角色
        抽象迭代器Iterator
            定义访问和遍历数据的接口
        具体迭代器ConcreteIterator
            实现接口,完成对聚合对象的遍历
            通过游标来记录当前位置
        抽象聚合类Aggregate
            用于存储和管理元素对象,有一个createIterator方法,用于创造迭代器
        具体聚合类ConcreteAggregate
            实现createIterator方法

看例子,电视遥控器遍历数据

1.迭代器接口,抽象迭代器

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public interface Television {
    TVIterator createIterator();
}

2.电视接口,抽象聚合类

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public interface Television {
    TVIterator createIterator();
}

3.具体聚合类和迭代器类

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public class TCLTelevision implements Television{
    private Object[] obj = {"湖南卫视","北京卫视","上海卫视"};
    public TVIterator createIterator() {
        return new TCLIterator();
    }

    class TCLIterator implements TVIterator {
        private int currentIndex = 0;
        public void next() {
            if (currentIndex < obj.length) {
                currentIndex ++ ;
            }
        }

        public void previous()
        {
            if(currentIndex>0)
            {
                currentIndex--;
            }
        }

        public void setChannel(int i)
        {
            currentIndex=i;
        }


        public Object currentChannel()
        {
            return obj[currentIndex];
        }

        public boolean isLast()
        {
            return currentIndex==obj.length;
        }

        public boolean isFirst()
        {
            return currentIndex==0;
        }
    }
}

4.客户端

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public class Client {
    public static void display(Television tv) {
        TVIterator i = tv.createIterator();
        System.out.println("电视机频道:");
        while (!i.isLast()) {
            System.out.println(i.currentChannel().toString());
            i.next();
        }
    }

    public static void reverseDisplay(Television tv) {
        TVIterator i = tv.createIterator();
        i.setChannel(3);
        System.out.println("逆向遍历电视机频道:");
        while(!i.isFirst())
        {
            i.previous();
            System.out.println(i.currentChannel().toString());
        }
    }

    public static void main(String a[])
    {
        Television tv;
        tv= new TCLTelevision();
        display(tv);
        System.out.println("--------------------------");
        reverseDisplay(tv);
    }
}

执行结果:

电视机频道:
湖南卫视
北京卫视
上海卫视
--------------------------
逆向遍历电视机频道:
上海卫视
北京卫视
湖南卫视

422101-20161027004421906-1830286910.png

转载于:https://www.cnblogs.com/jiqing9006/p/6002502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值