zoukankan      html  css  js  c++  java
  • 【设计模式】迭代器模式

    我们把对象堆起来放成为一个集合。方法有非常多,比方放进数组堆栈列表中。当客户想要遍历这些对象时,你打算让他看到你的实现么?当然不要!一点专业范儿都没了。

    所以今天我们谈的就是怎样让客户遍历对象而又无法窥视你存储对象的方式——迭代器模式

     

    概述

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

    适用情况:当不须要訪问一个聚集对象。并且无论这些对象是什么都须要遍历的,或在须要对聚集有多种方式遍历时,能够考虑使用迭代器模式。


    结构图




    演示样例:

    时间:火烧赤壁之前   地点:来自星星的公司  

    事件:好多人来參加面试公司今天的招聘。如今要做的就是怎么样让每一个人都能得到HR的面试。

     

    我们提供了这样一种方法,

    ①给等待面试的每个人编了一个号。并让他们坐在准备室(座位随意)。

    ②找一个小兵,小兵负责去准备室叫号,并等全部人面试完报告一声。

    HR在考场。

     

    来,上代码!

     

     

      //面试——迭代器实例   開始了。。。。准备好了不。

    。。

    。 class Program { //用于定义得到開始对象,得到下一个对象 推断是否到结尾。当前对象等抽象方法,统一接口(迭代器抽象类 ) abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } // 抽象的一个小兵(聚集抽象类 ) abstract class Aggregate { public abstract Iterator CreateIterator(); } //详细的小兵 工作权利 (详细迭代器) class 小兵 : Iterator { private 准备室 准备室; private int current = 0; public 小兵(准备室 准备室)//定义了一个详细聚集对象 { this.准备室=准备室; } public override object First()//叫第一个人 { return 准备室[0];} public override object Next()//叫下一个人 { object ret=null; current++; if (current<准备室.Count) { ret =准备室[current]; } return ret; } public override bool IsDone()//推断当前是否遍历到结尾 { return current >=准备室 .Count?true:false; } public override object CurrentItem() { return 准备室[current]; } } //详细聚集类 继承Aggregate class 准备室:Aggregate { private IList <object> items=new List<object>(); public override Iterator CreateIterator() { return new 小兵(this); } public int Count { get { return items.Count; } } public object this[int index] { get { return items[index]; } set { items.Insert(index,value );} } } //client static void Main(string[] args) { 准备室 a = new 准备室(); a[0] = "诸葛亮"; a[1] = "孙悟空"; a[2] = "李敏镐"; a[3] = "朱丽叶"; a[4] = "梅超风"; a[5] = "小乔"; Iterator i = new 小兵(a); object item = i.First(); while (!i.IsDone()) { Console.WriteLine("{0} 请进考场,祝您好运!", i.CurrentItem()); i.Next(); } Console.Read(); } } }


     

    结果显示


     

     这样做的优点是,HR不用看见准备室的情况。也能遍历每个应聘者。

    并且也不用关心准备室的人的座位顺序。

    并且。小兵也能够採用多种方式遍历,如从大号到小号或从小号到大号等顺序。


    值得一提的是,在如今的高级编程语言如c#Java等,本身已经把这个模式做在语言中了。即foreach in。

    可是这样的模式的思想是须要我们好好领会的。

    不说了不说了,小兵来叫他们考试了。

     

  • 相关阅读:
    jsp小测文件上传+servlet+分页 47/32(继续努力!)
    使用分层实现业务处理
    jsp 2018年5月7日11:04:15题库52/34
    jsp题库 (一)小测(25/21)
    Js2云题库,好题就得藏起来
    Jsp前2纠错
    【转】js限制用户上传文件类型
    【转】HTML from enctype 定义和实例
    fmt jstl标签 时间格式化例子
    【转】hibernate中lazy的使用
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7183755.html
Copyright © 2011-2022 走看看