博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器模式 -- 大话设计模式
阅读量:5334 次
发布时间:2019-06-15

本文共 2698 字,大约阅读时间需要 8 分钟。

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

迭代器模式:分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴漏集合的内部结构,又可让外部代码透明地访问集合内部的数据

1.售票员售票

  公交车进站,乘客上车,售票员登场,遍历乘客,购买车票

  首先定义迭代器抽象类和聚集抽象类

///     /// 迭代器抽象类    ///     public abstract class IAmyEnumerator    {        ///         /// 得到开始对象        ///         public abstract object First();        ///         /// 得到下一个对象        ///         public abstract object Next();        ///         /// 是否到结尾        ///         public abstract bool IsDone();        ///         /// 当前对象        ///         public abstract object CurrentItem();    }    ///     /// 聚集抽象类    ///     public abstract class IAmyEnumerable    {        ///         /// 创建迭代器        ///         public abstract IAmyEnumerator GetAmyEnumerator();    }

   定义售票员(具体迭代器类)和公交车类(具体聚集类)

///     /// 售票员类(具体迭代器类)    ///     public class TicketSeller : IAmyEnumerator    {        private Bus aggregate;        private int current = 0;        public TicketSeller(Bus aggregate)        {            this.aggregate = aggregate;        }        public override object First()        {            return aggregate[0];        }        public override object Next()        {            object ret = null;            current++;            if (current < aggregate.Count)            {                ret = aggregate[current];            }            return ret;        }        public override bool IsDone()        {            return current >= aggregate.Count;        }        public override object CurrentItem()        {            return aggregate[current];        }    }    ///     /// 公交车类(具体聚集类)    ///     public class Bus : IAmyEnumerable    {        //存放集合对象        private IList items = new List();        public override IAmyEnumerator GetAmyEnumerator()        {            return new TicketSeller(this);        }        ///         /// 返回集合对象总数        ///         public int Count        {            get { return items.Count; }        }        ///         /// 声明一个索引器        ///         public object this[int index]        {            get { return items[index]; }            set { items.Insert(index, value); }        }    }

   开始场景模拟

static void Main(string[] args)        {            //公交车进站            Bus bus = new Bus();            //乘客上车            bus[0] = "大鸟";            bus[1] = "小菜";            bus[2] = "乘客A";            //售票员登场            TicketSeller seller = new TicketSeller(bus);            //遍历乘客,购买车票            object item = seller.First();            while (!seller.IsDone())            {                Console.WriteLine("{0}请买车票!", seller.CurrentItem());                seller.Next();            }        }

 

转载于:https://www.cnblogs.com/amywechat/p/4929257.html

你可能感兴趣的文章
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>