• 设计模式-迭代器模式


    迭代器模式

    定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。

    如果我们需要遍历一个聚合对象中的各个元素,通常的做法是把遍历方法写在对象这个类里,这样做如果要更改遍历方法需要修改这个对象类,违背了“开闭原则”。迭代器模式能较好的克服这个缺点。

    使用场景:需要遍历一个聚合对象

    就像JDK的Iterable接口一样,集合实现了来进行遍历。
    正是因为有了这个模式,所以我们集合才能有foreach来遍历,因为foreach的底层就是itreable。

    代码示例:

    public interface Aggregate {
    
        Iterator getIterator();
    }
    
    public class ConcreteAggregate implements Aggregate {
    
    
        private static String[] names=new String[]{"xiaowang","xiaoli","abc","tiantian"};
    
        @Override
        public Iterator getIterator() {
            return new ConcreteIterator(names);
        }
    
    
    }
    
    public interface Iterator {
    
        Object next();
    
        boolean hasNext();
    }
    
    public class ConcreteIterator implements Iterator {
    
        private String[] names;
    
        public ConcreteIterator(String[] names) {
            this.names = names;
        }
    
        private int index=-1;
    
        @Override
        public Object next() {
            return names[++index];
        }
    
        @Override
        public boolean hasNext() {
            if(index<names.length-1)
                return true;
            else
                return false;
        }
    }
    

    测试代码:

     public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
            Aggregate aggregate=new ConcreteAggregate();
            Iterator iterator = aggregate.getIterator();
            while (iterator.hasNext()){
                Object next = iterator.next();
                System.out.println(next);
            }
    
        }
    

    返回目录

    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    AJAX 大全
    has value '1.8', but '1.7' is required
    VS2010官方下载地址
    win10桌面显示我的电脑
    使用 CAST
    for循环+canvas实现黑客帝国矩形阵
    C# Lambda
    win7系统部分便笺的元数据已被损坏怎么恢复
    SQL查询所有表,所有列
    truncate和delete之间有什么区别
  • 原文地址:https://www.cnblogs.com/javammc/p/14952797.html
Copyright © 2020-2023  润新知