20.迭代器模式(大话设计模式kotlin版)

迭代器模式

定义

**迭代器模式**(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

为不同的聚集结构提供第一项、下一个、是否结束、当前项等统一接口;

UML图

迭代器模式结构图

基本实现代码

Aggregate:抽象聚集类

abstract class Aggregate {

    abstract fun createIterator(): Iterator

}

ConcreteAggregate:具体聚集类

class ConcreteAggregate : Aggregate() {

    private val items = arrayListOf<Any>()

    override fun createIterator(): Iterator {
        return ConcreteIterator(this)
    }

    fun count() = items.size

    fun get(index: Int) = items.getOrNull(index)

    fun set(index: Int, obj: Any) = items.set(index, obj)

    fun addAll(arrays: List<Any>) {
        items.addAll(arrays)
    }
}

Iterator:抽象迭代器类

abstract class Iterator {

    abstract fun first(): Any?

    abstract fun next(): Any?

    abstract fun isDone(): Boolean

    abstract fun currentItem(): Any?
}

ConcreteIterator:具体迭代器类

class ConcreteIterator(val aggregate: ConcreteAggregate) : Iterator() {

    private var currentIndex = 0//指针,记录迭代到哪个位置

    override fun first(): Any? {
        return aggregate.get(0)
    }

    override fun next(): Any? {
        currentIndex++
        var tempObj: Any? = null
        if (currentIndex < aggregate.count()) {
            tempObj = aggregate.get(currentIndex)
        }
        return tempObj
    }

    override fun isDone(): Boolean {
        return currentIndex >= aggregate.count()
    }

    override fun currentItem(): Any? {
    return aggregate.get(currentIndex)
    }
}

Client:客户端

--->a
--->b
--->c
--->d
--->e
--->f

迭代器模式的优缺点

  • 优点:
    • 分离集合对象的遍历行为,抽出一个迭代器来负责,这样可以不暴露集合内部结构,又可以让外部代码透明底访问集合内部数据。
  • 应用:
    • 当需要对聚集提供多种方式遍历时(正向、反向遍历)
    • Java中的foreach
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值