zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    
    

    执行结果:

    电视机频道:
    湖南卫视
    北京卫视
    上海卫视


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

  • 相关阅读:
    textarea输入字符有限制
    linux 简单命令
    jQuery animate()
    两张图切换
    表单验证 靠name获取
    jquery验证手机号码
    倒计时
    锚点链接 阻止a标签跳转
    滚动监听: bootstrap 的scrollspy
    MySQL 02
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/6002502.html
Copyright © 2011-2022 走看看