Android设计模式详解之迭代器模式

前言

迭代器模式又称为游标模式,是行为型设计模式;

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

使用场景:遍历一个容器对象时;

UML类图:
迭代器模式UML类图
Iterator:迭代器接口,负责定义、访问和遍历元素的接口;
ConcreteIterator:具体迭代器类,实现迭代器接口,并记录遍历的当前位置;
Aggregate:容器接口,负责提供创建具体迭代器角色;
ConcreteAggregate:具体容器类;

模板代码

  • Iterator
/**
 * 迭代器接口
 */
interface Iterator<T> {

    /**
     * 是否还有下一个元素
     */
    fun hasNext(): Boolean

    /**
     * 返回当前位置的元素并将位置移至下一位
     */
    fun next(): T?
}
  • ConcreteIterator
/**
 * 具体迭代器类
 */
class ConcreteIterator<T>(private val list: ArrayList<T>) : Iterator<T> {

    private var cursor = 0 //当前位置

    override fun hasNext(): Boolean {
        return cursor != list.size
    }

    override fun next(): T? {
        var obj: T? = null
        if (hasNext()) {
            obj = list[cursor++]
        }
        return obj
    }
}
  • Aggregate
/**
 * 容器接口
 */
interface Aggregate<T> {

    /**
     * 添加元素
     */
    fun add(obj: T)

    /**
     * 移除元素
     */
    fun remove(obj: T)

    /**
     * 获取容器的迭代器
     */
    fun iterator(): Iterator<T>
}
  • ConcreteAggregate
/**
 * 具体的容器类
 */
class ConcreteAggregate<T> : Aggregate<T> {
    private val list = arrayListOf<T>()
    override fun add(obj: T) {
        list.add(obj)
    }

    override fun remove(obj: T) {
        list.remove(obj)
    }

    override fun iterator(): Iterator<T> {
        return ConcreteIterator(list)
    }
}
  • 代码使用
object Test {

    @JvmStatic
    fun main(args: Array<String>) {
        val concreteAggregate = ConcreteAggregate<String>()
        concreteAggregate.add("1")
        concreteAggregate.add("2")
        concreteAggregate.add("3")
        concreteAggregate.add("4")
        val iterator = concreteAggregate.iterator()
        while (iterator.hasNext()){
            println(iterator.next()) //结果输出 1 2 3 4
        }
    }
}

Android源码中的迭代器模式

  • 各种list、map集合
  • 数据库数据查询Cursor

总结

迭代器模式发展至今,几乎每一种高级语言都已经内置实现,极少需要自己去实现迭代器;

优点:支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法之间的关系;

缺点:类文件的增加;

结语

如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值