迭代模式

简介:

不就是迭代模式吗,就是第一个,上一个,下一个,最后一个,当前元素吗?
用得着搞几个接口弄出五六个类出来吗?
而且元素还是Object类型,装箱,拆箱的,真要命,用泛型吧
有时候在想,设计模式是用来欣赏的、用来学习的,真正在用的时候根本用不上,那么多接口和类,调来调去的
不好资源的吗?真正在用的时候应该是精简版的设计模式,你也可以说他不是设计模式,毕竟嘴是你的。
如果你的方法参数为基础类型,没有用out或ref,C#就会为你产生一个变量,因为基础类型是值拷贝
当然基础类型分配在栈中,分配速度较快,而且能很快回收,栈的容量是有限的吗,能不很快回收吗。
栈是先进后出,比如一个方法中的基础类型变量,先定义的先进栈,却后释放,什么叫压栈,就是这个道理啦。
引用类型参数一般不会产生多余的变量,引用类型就是引用对象的地址,直接对对象的地址内容进行操作
引用类型分配在托管堆中,在其中分配资源的速度相对栈较慢,因为需要寻找空闲内存,搜集整理内存碎片,都是要时间的。
托管堆中的资源什么时候被GC回收是不知道的,当然不会很久,这种事情是不能拖的,他可跟控件不同,你想脱就脱啊。

复制代码
namespace ClassTest
{
    /// <summary>
    /// 迭代模式
    /// </summary>
   public class Iterator<T>
    {
       private ConcreteList<T> concreteList;
       //索引值
       int index;
       public Iterator(ConcreteList<T> concreteList)
       {
           index = 0;
           this.concreteList = concreteList;
       }

       
       /// <summary>
       /// 第一个元素
       /// </summary>
       public void First()
       {
           index = 0;
       }

       
       /// <summary>
       /// 最后一个元素
       /// </summary>
       public void Last()
       {
           index = concreteList.Count - 1;
       }

        
       /// <summary>
       /// 当前元素
       /// </summary>
       /// <returns></returns>
       public T CurrentItem()
       {
           return concreteList.GetCurrent(index);
       }

        
       /// <summary>
       /// 下一个元素
       /// </summary>
       /// <returns></returns>
       public bool Next()
       {
           if (++index >= concreteList.Count) //如果当前元素已经最后一个元素,返回false
           {
               return false;
           }
           return true;
       }

      
       /// <summary>
       /// 上一个元素
       /// </summary>
       private void Previous()
       {
           if (index > 0)
           {
               index--;
           }
       }

    }
}

using System;
using System.Collections.Generic;

namespace ClassTest
{
   /// <summary>
   /// 实体集合
   /// 对元素进行添加、删除和显示
   /// </summary>
   /// <typeparam name="T"></typeparam>
   public class ConcreteList<T>
    {
       private IList<T> list;

       public ConcreteList()
       {
           list = new List<T>();
       }

 
       /// <summary>
       /// 添加元素
       /// </summary>
       /// <param name="t"></param>
       public void Add(T t)
       {
           list.Add(t);
       }

 
       /// <summary>
       /// 删除指定元素
       /// </summary>
       /// <param name="t"></param>
       public void Remove(T t)
       {
           list.Remove(t); 
       }

 
       /// <summary>
       /// 根据索引删除元素
       /// </summary>
       /// <param name="index"></param>
       public void RemoveAt(int index)
       {
           if (Count <= index)     //索引超出范围
           {
               throw new ArgumentOutOfRangeException("index");
           }
           list.RemoveAt(index);
       }

 
       /// <summary>
       /// 元素个数
       /// </summary>
       public int Count
       {
           get {
               return list.Count;
           }
       }

 
       /// <summary>
       /// 获取当前元素
       /// </summary>
       /// <param name="index"></param>
       /// <returns></returns>
       public T GetCurrent(int index)
       {
           if (Count == 0)       //处理集合为空的情况
           {
               return default(T);
           }
           if (Count<=index)     //索引超出范围
           {
               throw new ArgumentOutOfRangeException("index");
           }
           return list[index];
       }

       
    }
}
复制代码

 

本文转自啊汉博客园博客,原文链接:http://www.cnblogs.com/hlxs/archive/2011/04/08/2087979.html


目录
相关文章
|
5月前
|
存储 数据处理
什么是迭代,什么是可迭代对象
什么是迭代,什么是可迭代对象
73 1
|
2月前
|
敏捷开发
敏捷开发的全过程问题之迭代排期时提前梳理下一迭代的需求列表的问题如何解决
敏捷开发的全过程问题之迭代排期时提前梳理下一迭代的需求列表的问题如何解决
|
3月前
|
网络协议 开发者
迭代重构问题之没有日常迭代的微重构例子,如何解决
迭代重构问题之没有日常迭代的微重构例子,如何解决
|
5月前
|
测试技术
快速迭代下,研发和测试如何高效配合?
快速迭代下,研发和测试如何高效配合?
|
5月前
|
监控 安全 测试技术
迭代测试发现不了问题,怎么办
迭代测试发现不了问题,怎么办
39 0
|
缓存 算法 Java
使用迭代优化递归程序
大家好,我是王有志。 今天我们将会分析上篇文章中递归算法存在的问题,并通过迭代去优化。
99 1
使用迭代优化递归程序
|
JavaScript 前端开发 数据库
什么是异步迭代?如何自定义迭代?一文详解ES6的迭代器与生成器
迭代器是帮助我们对某个数据结构进行遍历的对象,这个`object`有一个`next`函数,该函数返回一个有`value`和`done`属性的`object`,其中`value`指向迭代序列中当前`next`函数定义的值。
80 0
什么是异步迭代?如何自定义迭代?一文详解ES6的迭代器与生成器
|
机器学习/深度学习 算法
强化学习中价值迭代和策略迭代各有什么优缺点?
强化学习中价值迭代和策略迭代各有什么优缺点?
196 0
|
Rust 自然语言处理 算法
【算法】1389. 按既定顺序创建目标数组(多语言实现)
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: 目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。 题目保证数字插入位置总是存在。
【算法】1389. 按既定顺序创建目标数组(多语言实现)