欢迎来到Vincentyw的博客

该来的终究会来,该走的也一定会离开。凡事都存在前因后果,因缘成熟了,果报便产生了,无法阻挡。
但是发生过了就会消失,有来就有走,一切都是过客,把握自己当下的因缘,承担起自己该承担的责任,做好眼前该做的事情,做的时候尽全力,过去便放下,放下即自在。

设计模式之迭代器模式

Iterator(迭代器)

一、迭代器模式简介

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式属于行为型模式

核心:

  • 1、提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示
  • 2、不同的方式来遍历整个整合对象
  • 3、定义接口:hasNext, next。

二、迭代器模式优缺点比较

优点:

  • 1、支持以不同的方式遍历一个聚合对象
  • 2、迭代器简化了聚合类
  • 3、扩展灵活

缺点:

  • 1、由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性

使用场景:

  • 1、JDK内置的遍历(list/set)

注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

三、UML类图

 

 

 四、设计实现

步骤1:创建迭代器接口

//迭代器---遍历数据
public interface Iterator {
    public boolean hasNext();
    public Object next();
}

步骤2:创建容器接口

//容器
public interface Container {
    public Iterator getIterator();
}

步骤3:创建实现容器接口的具体类

//聚合对象---存储数据
public class MyContainer implements Container {    
    private List<Object> lists = new ArrayList<>();

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public  Iterator getIterator() {
        return new MyIterator();
    }
    
    public void addObject(Object obj) {
        lists.add(obj);
    }
    
    public Object removeObject(Object obj) {
        return lists.remove(obj);
    }
    
    //静态内部类---迭代器实现类
    private class MyIterator implements Iterator{
        int cursor;
        
        @Override
        public boolean hasNext() {
            if(cursor<lists.size()) {
                return true;
            }
            return false;
        }

        @Override
        public Object next() {
            if(cursor<lists.size()) {
                return lists.get(cursor++);
            }
            return null;
        }
    }
}

步骤4:调用者测试

public class IteratorDemo {
    public static void main(String[] args) {
        MyContainer c = new MyContainer();
        c.addObject("aaa");
        c.addObject("bbb");
        c.addObject("ccc");
        c.addObject("tttttttt");
        System.out.println(c.getLists().toString());
        Iterator it = c.getIterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

步骤5:运行程序,观察结果

 

posted on 2020-04-07 22:13  VincentYew  阅读(180)  评论(0)    收藏  举报

导航