迭代器模式 InteratorPattern

本文介绍了一种软件设计模式——迭代器模式,并通过两个具体类的实现进行演示:一个用于处理员工姓名列表,另一个用于处理员工薪资信息。文章展示了如何创建迭代器来遍历集合中的元素,而不暴露集合的具体结构。

interface Interator { bool hasElement(); object Next(); }

迭代器接口

using System; using System.Collections; class EmployeeNameTable { private const int MAXNUMBER = 10; private ArrayList _NameTable; public EmployeeNameTable() { _NameTable = new ArrayList(); } public EmployeeNameTable(ArrayList nametable) { _NameTable = nametable; } public void addEmployeeName(string name) { if (_NameTable.Count <= MAXNUMBER) _NameTable.Add(name); } public void printEmployeeName() { Console.WriteLine("开始打印员工姓名"); foreach (string n in _NameTable) Console.WriteLine(n); } public NameTableIterator createNameTableIterator() { return new NameTableIterator(_NameTable); } }

类A

using System; using System.Collections; class NameTableIterator:Interator { private ArrayList _NameTable; private int _Flag; public NameTableIterator(ArrayList nametable) { _NameTable = nametable; _Flag = 0; } #region Interator 成员 public bool hasElement() { bool result = false; if (_Flag < _NameTable.Count) result = true; return result; } public object Next() { return _NameTable[_Flag++]; } #endregion }

类A的迭代器

using System; class EmployeeSalaryTable { private double[] _SalaryTable; private const int MAXNUMBER = 10; public EmployeeSalaryTable() { _SalaryTable=new double[MAXNUMBER]; } public EmployeeSalaryTable(double[] salarytable) { _SalaryTable = salarytable; } public void addEmployeeSalary(double salary) { if (_SalaryTable.Length<= MAXNUMBER) _SalaryTable[_SalaryTable.Length-1] = salary; } public void printSalaryInformation() { Console.WriteLine("现在开始打印员工的工资信息"); for (int i = 0; i < _SalaryTable.Length; i++) Console.WriteLine(_SalaryTable[i]); } public SalaryTableInterator createSalaryTableInterator() { return new SalaryTableInterator(_SalaryTable); } }

类B

using System; class SalaryTableInterator : Interator { private double[] _SalaryTable; private int flag; public SalaryTableInterator(double[] salarytable) { _SalaryTable = salarytable; flag = 0; } #region Interator 成员 public bool hasElement() { bool result=false; if (flag < _SalaryTable.Length) result = true; return result; } public object Next() { return _SalaryTable[flag++]; } #endregion }

类B的迭代器

using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace InteratorPattern { class Program { static void Main(string[] args) { ArrayList nametable = new ArrayList(); nametable.Add("Jim"); nametable.Add("Bill"); nametable.Add("Bluce"); nametable.Add("Lucy"); nametable.Add("Maria"); double[] salarytable = new double[] { 3000, 5000, 2000, 9000, 10000 }; EmployeeSalaryTable est = new EmployeeSalaryTable(salarytable); EmployeeNameTable ent = new EmployeeNameTable(nametable); //est.printSalaryInformation(); //ent.printEmployeeName(); SalaryTableInterator sti = est.createSalaryTableInterator(); NameTableIterator nti = ent.createNameTableIterator(); while (sti.hasElement()) { Console.WriteLine(sti.Next()); } while (nti.hasElement()) { Console.WriteLine(nti.Next()); } Console.ReadKey(); } } }

调用者

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值