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 朱进博 1724282894@qq.com
*/
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 朱进博 1724282894@qq.com
*/
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 朱进博 1724282894@qq.com
*/
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 朱进博 1724282894@qq.com
*/
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);
        }
}


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

优点:
  • 更好的封装性
  • 可以以不同的遍历方式来遍历一个聚合
  • 迭代器简化了聚合的接口
  • 简化客户端调用
  • 同一聚合可以有多个遍历
感谢阅读,水平有限,如有错漏,还请不吝赐教
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值