设计模式之迭代器模式
时间:2022-07-22
本文章向大家介绍设计模式之迭代器模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
设计模式之迭代器模式
结构
说明
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
适用条件
迭代器模式是非常常见的设计模式之一, 适用条件很广, 需要访问聚合对象(数组、集合、列表等)的元素时, 即可使用迭代器模式。
实现
public interface IIterator {
object CurrentItem();
void First();
bool IsDone();
void Next();
}
public interface IAggregate {
IIterator CreateIterator();
}
public class ConcreteIterator : IIterator {
private readonly object[] _aggregateItems;
private int _index;
public ConcreteIterator(object[] aggregateItems) {
this._aggregateItems = aggregateItems;
this._index = 0;
}
public object CurrentItem() {
return this._aggregateItems[this._index];
}
public void First() {
this._index = 0;
}
public bool IsDone() {
return this._index == this._aggregateItems.Length;
}
public void Next() {
this._index += 1;
}
}
public class ConcreateAggregate : IAggregate {
private readonly object[] _items;
public ConcreateAggregate(params object[] items) {
if (items != null) {
this._items = new object[items.Length];
for (var i = 0; i < items.Length; i++) {
this._items[i] = items[i];
}
}
}
public IIterator CreateIterator() {
return new ConcreteIterator(this._items);
}
}
class Client {
static void Main(string[] args) {
IAggregate aggregate = new ConcreateAggregate("Item1", "Item2", "Item3", "Item4");
IIterator iterator = aggregate.CreateIterator();
if (iterator.IsDone()) {
iterator.First();
}
while (!iterator.IsDone()) {
Console.WriteLine(iterator.CurrentItem());
iterator.Next();
}
Console.ReadKey();
}
}
.Net 内置了迭代器模式, 也称之为枚举器模式, 对应的接口类型为:
/// IEnumerator 对应 Iterator
public interface IEnumerator {
object Current;
bool MoveNext();
void Reset();
}
/// IEnumerable 与 Aggregate 对应
public interface IEnumerable {
IEnumerator GetEnumerator();
}
.Net 基础类库之中, 有很多类实现这两个接口, 比如: ArrayList, List, Collection, Hashtable 等。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法