迭代器模式-Iterator

名称:

    迭代器模式(Iterator Pattern)-对象行为模式

 

问题:

    The iterator pattern provides a consistent way to sequentially access items in a collection that is independent of and separate from the underlying collection.

     -提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

 

适用性:

    -访问一个聚合对象的内容而无需暴露它的内部表示。

    -支持对聚合对象的多种遍历。

    -为遍历不同的聚合结构提供一个统一的接口。

 

协作:

    ConcreteAggregate跟踪聚合中的当前对象,并能够计算出待遍历的后续对象。

 

优点和缺点:

    1、支持以不同的方式遍历一个聚合。

    2、迭代器简化了聚合的接口。

    3、在同一个聚合上可以有多个遍历。

 

解决方案:

    

1、 模式的参与者

    1、Iterator

    -迭代器定义访问和遍历元素的接口。

    2、ConcreteIterator

    -具体迭代器实现迭代器接口。

    -对该聚合遍历时跟踪当前位置。

    3、Aggregate

    -聚合定义创建相应迭代器对象的接口。

    4、ConcreteAggregate

    -具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。

 

2.实现方式

    

interface Aggregate
{ 
    public void add(Object obj); 
    public void remove(Object obj); 
    public Iterator getIterator(); 
}
复制代码
class ConcreteAggregate implements Aggregate
{ 
    private List<Object> list=new ArrayList<Object>(); 
    public void add(Object obj)
    { 
        list.add(obj); 
    }
    public void remove(Object obj)
    { 
        list.remove(obj); 
    }
    public Iterator getIterator()
    { 
        return(new ConcreteIterator(list)); 
    }     
}
复制代码
interface Iterator
{
    Object first();
    Object next();
    boolean hasNext();
}
复制代码
class ConcreteIterator implements Iterator
{ 
    private List<Object> list=null; 
    private int index=-1; 
    public ConcreteIterator(List<Object> list)
    { 
        this.list=list; 
    } 
    public boolean hasNext()
    { 
        if(index<list.size()-1)
        { 
            return true;
        }
        else
        {
            return false;
        }
    }
    public Object first()
    {
        index=0;
        Object obj=list.get(index);;
        return obj;
    }
    public Object next()
    { 
        Object obj=null; 
        if(this.hasNext())
        { 
            obj=list.get(++index); 
        } 
        return obj; 
    }   
}
复制代码

 

参考资料

《设计模式:可复用面向对象软件的基础》

posted @   diameter  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示