GOF23之迭代器模式

一、核心作用:

提供一个可以遍历聚合对象的方式
聚合对象:存储数据
迭代器:遍历数据

二、常见应用场景:

1、JDK内置的迭代器(List/Set)

三、迭代器模式的实现:

抽象迭代器(Iterator)角色:此抽象角色定义出遍历元素所需的接口
具体迭代器(ConcreteIterator)角色:实现了Iterator接口
聚类(Aggregate)角色:此抽象角色给出创建迭代器对象的接口
具体聚集类(ConcreteAggregate)角色:实现了创建迭代器Iterator对象的接口,返回一个合适的具体迭代器实例

四、代码示例:

一、抽象迭代器:
package com.hezeu.iterator;

/**
* @Classname MyInteger
* @Description 抽象迭代器
* @Date 2020/2/25 下午 07:28
* @Created by 朱进博 [email protected]
*/
public interface MyInteger {
        void first();
        void next();
        boolean hasNext();
        boolean isFirst();
        boolean isLast();

        Object getCurrentObj();
}

二、具体迭代器:
package com.hezeu.iterator;

import java.util.List;

/**
* @Classname ConcreteIterator
* @Description TODO
* @Date 2020/2/25 下午 08:48
* @Created by 朱进博 [email protected]
*/
public class ConcreteIterator implements MyInteger {
        private List<Object> list;
        private int cursor; //游标位置

        public ConcreteIterator(List<Object> list) {
                this.list = list;
        }

        @Override
        public void first() {
                cursor = 0;
        }

        @Override
        public void next() {
                if (cursor < list.size())
                        cursor++;
        }

        @Override
        public boolean hasNext() {
                if (cursor < list.size())
                        return true;
                return false;
        }

        @Override
        public boolean isFirst() {
                return cursor == 0 ? true : false;
        }

        @Override
        public boolean isLast() {
                return cursor == (list.size() - 1) ? true : false;
        }

        @Override
        public Object getCurrentObj() {
                return list.get(cursor);
        }
}

三、聚类:
package com.hezeu.iterator;

import java.util.List;

/**
* @Classname Aggregate
* @Description TODO
* @Date 2020/2/25 下午 08:31
* @Created by 朱进博 [email protected]
*/
public interface Aggregate {
        MyInteger createIterator();
        void addObject(Object obj);
        void removeObject(Object obj);
        List<Object> getList();
        void setList(List<Object> list);
}


四、具体聚类
package com.hezeu.iterator;

import java.util.ArrayList;
import java.util.List;

/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱进博 [email protected]
*/
public class ConcreteAggregate implements Aggregate{
        private List<Object> list = new ArrayList<>();

        public void addObject(Object obj) {
                this.list.add(obj);
        }

        public void removeObject(Object obj) {
                this.list.remove(obj);
        }

        public List<Object> getList() {
                return list;
        }

        public void setList(List<Object> list) {
                this.list = list;
        }

        public MyInteger createIterator() {
                return new ConcreteIterator(list);
        }
}


五、迭代器模式的优缺点:

优点:

  • 更好的封装性
  • 可以以不同的遍历方式来遍历一个聚合
  • 迭代器简化了聚合的接口
  • 简化客户端调用
  • 同一聚合可以有多个遍历

感谢阅读,水平有限,如有错漏,还请不吝赐教

发布了26 篇原创文章 · 获赞 17 · 访问量 2907

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104507932