Net设计模式实例之迭代器模式(Iterator Pattern)

简介:

一、迭代器模式简介(Brief Intro du ction

迭代器模式( Iterator Pattern ),提供一种方法顺序访问一个聚合对象中元素,而不暴露改集合对象的内部表示。
Provide a way to access the elements of an aggregate object sequentia ll y without exposing its underlying representation.

二、解决的问题(What To Solve

当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,应该考虑用迭代器模式;当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式。

三、迭代器模式分析(Analysis

1、迭代器模式结构

Aggragate :聚集抽象类  并通过 CreateIterator() 方法创建一个迭代对象。
ConcrateAggregate :具体实现类,继承于 Aggregate 抽象类,实现创建迭代对象的方法。
Iterator 迭代抽象类 :定义一个接口用于访问和遍历集合中的各个元素;
First() 方法:定位第一个元素
Next() 方法:定位下一个元素
IsDone() 方法:是否为结尾元素
CurrentItem() 方法:定位当前对象
ConcreteIterator 具体迭代类 :继承于 Iterator 抽象类,实现父类中的各个方法。

2、源代码

1 聚集抽象类 Aggregate 及其 具体实现类 ConcreteAggregate
///   <summary>
///  The 'Aggregate' abstract class
///   </summary>
abstract  class Aggregate
{
    public abstract Iterator  CreateIterator();
}
///   <summary>
///  The 'ConcreteAggregate' class
///   </summary>
class  ConcreteAggregate  : Aggregate
{
    private Ar ray List  _items = new Ar ray List ();
    public override Iterator  CreateIterator()
     {
        return new ConcreteIterator (this );
     }
 
    // Gets item count
    public int  Count
     {
        get  { return  _items.Count; }
     }
    // Indexer
    public object this [int  index]
     {
        get  { return  _items[index]; }
        set  { _items.Insert(index, value ); }
     }
}
 
2 、抽象迭代器类 Iterator 及其具体迭代器类ConcreteIterator
///   <summary>
///  The 'Iterator' abstract class
///   </summary>
abstract  class Iterator
{
    public abstract object  First();
    public abstract object  Next();
    public abstract bool  IsDone();
    public abstract object  CurrentItem();
}
///   <summary>
///  The 'ConcreteIterator' class
///   </summary>
class  ConcreteIterator  : Iterator
{
    private ConcreteAggregate  _aggregate;
    private int  _current = 0;
    // Constructor
    public  ConcreteIterator(ConcreteAggregate  aggregate)
     {
        this ._aggregate = aggregate;
     }
    // Gets first iteration item
    public override object  First()
     {
        return  _aggregate[0];
     }
    // Gets next iteration item
    public override object  Next()
     {
        object  ret = nu ll ;
        if  (_current < _aggregate.Count - 1)
         {
             ret = _aggregate[++_current];
         }
        return  ret;
     }
    // Gets current iteration item
    public override object  CurrentItem()
     {
        return  _aggregate[_current];
     }
 
    // Gets whether iterations are complete
    public override bool  IsDone()
     {
        return  _current >= _aggregate.Count;
     }
}
 
3 、客户端代码
static  void  Main (string [] args)
{
    ConcreteAggregate  a = new ConcreteAggregate ();
     a[0] = "Item A" ;
     a[1] = "Item B" ;
     a[2] = "Item C" ;
     a[3] = "Item D" ;
 
    // Create Iterator and provide aggregate
    ConcreteIterator  i = new ConcreteIterator (a);
    Console .WriteLine("Iterating over co ll ection:" );
    object  item = i.First();
    while  (item != nu ll )
     {
        Console .WriteLine(item);
         item = i.Next();
     }
    // Wait for user
    Console .ReadKey();
}

3、程序运行结果










本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/275320,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性与扩展性本文旨在探讨PHP中常见的设计模式及其应用,帮助开发者编写出更加灵活、可维护和易于扩展的代码。通过深入浅出的解释和实例演示,我们将了解如何使用设计模式解决实际开发中的问题,并提升代码质量。
在软件开发过程中,设计模式是一套经过验证的解决方案模板,用于处理常见的软件设计问题。PHP作为流行的服务器端脚本语言,也有其特定的设计模式应用。本文将重点介绍几种PHP中常用的设计模式,包括单例模式、工厂模式和策略模式,并通过实际代码示例展示它们的具体用法。同时,我们还将讨论如何在实际项目中合理选择和应用这些设计模式,以提升代码的可维护性和扩展性。
59 4
|
23天前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文重点介绍迭代器模式,通过具体示例展示了如何在Kotlin中实现迭代器模式,包括使用Iterator、Iterable接口及重载iterator运算符的方法。
27 4
|
24天前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
25 2
|
24天前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解了Kotlin中的迭代器模式,包括如何通过实现Iterator和Iterable接口以及重载iterator运算符来实现可遍历的自定义集合。示例展示了如何创建一个图书集类,并通过不同方式使其支持遍历操作,适合希望深入了解Kotlin迭代器模式的开发者。
29 3
|
3天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
6 0
|
26天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
30 1
|
27天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
25 1
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

热门文章

最新文章

  • 1
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    44
  • 2
    C++一分钟之-C++中的设计模式:单例模式
    51
  • 3
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    36
  • 4
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    59
  • 5
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    54
  • 6
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    39
  • 7
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    49
  • 8
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    102
  • 9
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    74
  • 10
    Go语言设计模式:使用Option模式简化类的初始化
    71