设计模式之迭代器模式

来源:互联网 发布:舰娘国服 知乎 编辑:程序博客网 时间:2024/06/05 15:34

简介

迭代器模式(Iterator Pattern):它提供一种方法访问一个容器对象的各个元素,而不需要暴露该对象的内部细节。该模式目前已经是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。

优点:

  1. 它支持以不同的方式遍历一个聚合对象。
  2. 迭代器简化了聚合类。
  3. 在同一个聚合上可以有多个遍历。
  4. 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点:

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

类图

Iterator抽象迭代器:负责定义访问和遍历元素接口;
ConcreteIterator具体迭代器:实现迭代器接口,完成元素的遍历;
Aggregate抽象容器:负责提供创建具体迭代器角色的接口;
ConcreteAggregate具体容器:实现容器接口定义的方法,创建出容纳迭代器的对象

java实现

创建抽象的或者迭代器接口

public interface Iterator {        //遍历到下一个元素        Object next();        //是否已经遍历到尾部        boolean hsaNext();        //删除当前指向的元素        boolean remove();    }
实现类
    public class ConcreteIterator implements Iterator{        private Vector vector = new Vector();        //当前游标        public int cursor = 0;        public ConcreteIterator(Vector vector){            this.vector = vector;        }        @Override        public Object next() {            Object result;            if(this.hsaNext()){                result = this.vector.get(this.cursor++);            }else{                result = null;            }            return result;        }        @Override        public boolean hsaNext() {            if (this.cursor == this.vector.size()){                return false;            }else {                return true;            }        }        @Override        public boolean remove() {            this.vector.remove(this.cursor);            return true;        }    }

创建容器:

public interface Aggregate {        //添加元素        void add(Object object);        //删除元素        void remove(Object object);        //遍历所有元素        Iterator iterator();    }
    public class ConcreteAggregate implements Aggregate {        private Vector vector = new Vector();        @Override        public void add(Object object) {            this.vector.add(object);        }        @Override        public void remove(Object object) {            this.vector.remove(object);        }        @Override        public Iterator iterator() {            return new ConcreteIterator(this.vector);        }    }

场景类:

    public class Client {        public static  void main(String[] args){            //声明容器            Aggregate aggregate = new ConcreteAggregate();            //存放数据            aggregate.add("aaaaaaaa");           aggregate.add("bbbbbbb");            aggregate.add("ccccc");            aggregate.add("dddd");            //获取迭代器并且遍历            Iterator iterator = aggregate.iterator();            while (iterator.hsaNext()){                System.out.println(iterator.next());            }        }    }

原创粉丝点击