前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式--迭代器模式

设计模式--迭代器模式

原创
作者头像
软件工程师Michael
发布2023-07-19 09:15:14
2520
发布2023-07-19 09:15:14
举报

迭代器模式是一种行为型设计模式,它允许客户端遍历一种容器(如列表或数组)中的元素,并访问容器中的每个元素,而无需关心容器的内部实现。迭代器模式属性于单一职责原则,因为它将遍历和容器分离开来。

使用迭代器模式,客户端可以遍历容器中的元素,而无需了解容器的内部数据结构。这使得可以轻松添加或删除容器的元素的方式,而无需修改客户端代码。此外,迭代器模式还使客户端代码更加简洁,因为迭代器封装了遍历过程。

以下是一个简单的使用迭代器模式的C#示例:

代码语言:javascript
复制
using System;
using System.Collections.Generic;

// 抽象迭代器
interface IIterator<T> 
{
    T First();
    T Next();
    bool IsDone();
    T CurrentItem();
}

// 具体迭代器
class ConcreteIterator<T> : IIterator<T>
{
    private ConcreteAggregate<T> _aggregate;
    private int _current = 0;

    public ConcreteIterator(ConcreteAggregate<T> aggregate) 
    {
        _aggregate = aggregate;
    }

    public T First() 
    {
        return _aggregate[0];
    }

    public T Next() 
    {
        T ret = default(T);
        if (_current < _aggregate.Count - 1) 
        {
            ret = _aggregate[++_current];
        }
        return ret;
    }

    public bool IsDone() 
    {
        return _current >= _aggregate.Count;
    }

    public T CurrentItem() 
    {
        return _aggregate[_current];
    }
}

// 抽象聚合类
interface IAggregate<T> 
{
    IIterator<T> CreateIterator();
}

// 具体聚合类
class ConcreteAggregate<T> : IAggregate<T>
{
    List<T> items = new List<T>();

    public IIterator<T> CreateIterator() 
    {
        return new ConcreteIterator<T>(this);
    }

    public int Count 
    {
        get 
        {
            return items.Count;
        }
    }

    public void Add(T item) 
    {
        items.Add(item);
    }

    public T this[int index] 
    {
        get 
        {
            return items[index];
        }
    }
}

class Program 
{
    static void Main() 
    {
        // 创建聚合对象
        var aggregate = new ConcreteAggregate<int>();

        // 添加元素
        aggregate.Add(1);
        aggregate.Add(2);
        aggregate.Add(3);
        aggregate.Add(4);
        aggregate.Add(5);

        // 获取迭代器
        var iterator = aggregate.CreateIterator();

        // 遍历容器中的元素
        Console.WriteLine("Iterating over collection:");
        for (var item = iterator.First(); !iterator.IsDone(); item = iterator.Next()) 
        {
            Console.WriteLine(item);
        }
    }
}

在此示例中,我们首先定义了一个抽象迭代器接口和一个具体迭代器类,以支持在容器中遍历元素。然后,我们定义了一个抽象聚合类和一个具体聚合类,以封装要遍历的容器。我们通过在具体聚合类中实现CreateIterator方法来获取Iterator对象。

在Main方法中,我们创建ConcreteAggregate实例,添加元素,然后使用CreateIterator方法创建一个具体迭代器对象。最后,我们使用迭代器遍历容器中的元素并将它们打印到控制台上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档