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

      迭代器模式(Iterator Pattern),提供一种方法顺序访问一个聚合对象中元素,而不暴露该集合对象的内部表示。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace PatternProject
    {
        public class People
        {
            public string name
            { get; set; }
    
            public string sex
            { get; set; }
    
            public int age
            { get; set; }
    
            public DateTime JoinDateTime
            { get; set; }
    
            public People(string name, string sex, int age)
            {
                this.name = name;
                this.sex = sex;
                this.age = age;
                this.JoinDateTime = DateTime.Now;
            }
        }
    
        public interface ISearcher  
        {
            bool Next();  //在迭代时,判断是否能获取下一个,外部遍历必需实现该方法
        }
    
        public interface IProvince  
        {
            ISearcher GetSearcher();  //获取迭代器对象
        }
    
    
        public class Province : IProvince
        {
            List<People> peopleList = new List<People>();
    
            public string name
            { get; set; }
    
            public Province(string name)
            {
                this.name = name;
            }
    
            public ISearcher GetSearcher()
            {
                return new Searcher(this, "黄某", "男", 45);
            }
    
            public People this[int index]
            {
                get { return peopleList[index]; }
                //set { peopleList.Add(value); }
            }
    
            public void Join(People people)
            {
                peopleList.Add(people);
            }
    
            public int GetPeopleCount()
            {
                return peopleList.Count;
            }
        }
    
    
        public class Searcher : People, ISearcher
        {
            Province _province;
            int _currentIndex;
    
            public Searcher(Province province, string name, string sex, int age)
                : base(name, sex, age)
            {
                _province = province;
                _currentIndex = -1;
            }
    
            public People Current
            {
                get { return _province[_currentIndex]; }
            }
    
            public bool Next()
            {
               _currentIndex++;
               return _province.GetPeopleCount() > _currentIndex;
            }
    
        }
    
    
    }
    
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace PatternProject
    {
        class Program
        {
            static void Main(string[] args)
            {
                Province SZProvince = new Province("深圳市");
                SZProvince.Join(new People("张三", "男", 25));
                SZProvince.Join( new People("李四", "男", 35));
                SZProvince.Join(new People("王五", "男", 30));
                SZProvince.Join(new People("赵六", "男", 28));
                SZProvince.Join(new People("谢七", "女", 20));
    
                Console.WriteLine("{0}共计人口:{1}人", SZProvince.name, SZProvince.GetPeopleCount());
                Searcher srh= (Searcher)SZProvince.GetSearcher();
    
                Console.WriteLine("人口检查官:{0}人口普查结果如下:", srh.name);
    
                while (srh.Next())
                {
                    People p=srh.Current;
                    Console.WriteLine("{0},{1},{2}岁于{3}入住;", p.name, p.sex, p.age, p.JoinDateTime);
                }
    
                Console.ReadKey();
            }
        }
    }
    

      

  • 相关阅读:
    使用littleTools简化docker/kubectl的命令
    (上)python3 selenium3 从框架实现学习selenium让你事半功倍
    一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!
    VxLAN协议详解
    深入理解大数据之——事务及其ACID特性
    深入理解大数据架构之——Lambda架构
    JQCloud: 一个前端生成美化标签云的简单JQuery插件
    详解Java中的final关键字
    OpenDaylight虚拟租户网络(VTN)详解及开发环境搭建
    使用Pelican在Github(国外线路访问)和Coding(国内线路访问)同步托管博客
  • 原文地址:https://www.cnblogs.com/zuowj/p/3504610.html
Copyright © 2011-2022 走看看