using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPattern
{
//迭代器模式
//提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。
/// <summary>
/// 抽象聚合类 存储和管理元素对象 存储List 增删查 创建迭代器的工厂方法
/// </summary>
abstract class AbstractObjectList
{
protected List<object> objects = new List<object>();
public AbstractObjectList(List<object> objects)
{
this.objects = objects;
}
public void AddObject(object obj)
{
this.objects.Add(obj);
}
public void RemoveObject(object obj)
{
this.objects.Remove(obj);
}
public List<object> GetObjects()
{
return this.objects;
}
//声明创建迭代器对象的抽象工厂方法
public abstract AbstractIterator CreateInterator();
}
/// <summary>
/// 商品数据类 充当具体聚合类
/// </summary>
class ProductList : AbstractObjectList
{
public ProductList(List<object> products) : base(products)
{
}
public override AbstractIterator CreateInterator()
{
return new ProductInterator(this);
}
}
/// <summary>
/// 抽象迭代器
/// </summary>
interface AbstractIterator
{
void Next();//移至下一个元素
bool IsLast();//判断是否为最后一个元素
void Previous();//移至上一个元素
bool IsFirst();//判断是否为第一个元素
object GetNextItem();//获取下一个元素
object GetPreviousItem();//获取上一个元素
}
/// <summary>
/// 商品迭代器 充当具体迭代器
/// </summary>
class ProductInterator : AbstractIterator
{
private ProductList productList;
private List<object> products;
private int Cursor1; //定义一个游标,用于记录正向遍历的位置
private int Cursor2; //定义一个游标,用于记录逆向遍历的位置
public ProductInterator(ProductList list)
{
this.productList = list;
this.products = list.GetObjects();//获取集合对象
Cursor1 = 0;//设置正向游标的初始值
Cursor2 = products.Count - 1;//设置逆向游标的初始值
}
public object GetNextItem()
{
return products[Cursor1];
}
public object GetPreviousItem()
{
return products[(Cursor2)];
}
public bool IsFirst()
{
return (Cursor2 == -1);
}
public bool IsLast()
{
return (Cursor1 == products.Count());
}
public void Next()
{
if (Cursor1 < products.Count)
{
Cursor1++;
}
}
public void Previous()
{
if (Cursor2 > -1)
{
Cursor2--;
}
}
}
//客户端测试类
class program1
{
private void main()
{
List<object> products = new List<object>();
products.Add("倚天剑");
products.Add("屠龙刀");
products.Add("断肠草");
products.Add("葵花宝典");
products.Add("四十二章经");
AbstractObjectList list;
AbstractIterator interator;
list = new ProductList(products); //创建聚合对象
interator = list.CreateInterator(); //创建迭代器对象
Console.WriteLine("正向遍历");
while (!interator.IsLast())
{
Console.WriteLine(interator.GetNextItem() + ",");
interator.Next();
}
Console.WriteLine();
Console.WriteLine("------------");
Console.WriteLine("逆向遍历");
while (!interator.IsFirst())
{
Console.WriteLine(interator.GetPreviousItem() + ",");
interator.Previous();
}
Console.Read();
//输出结果
//正向遍历:
//倚天剑,屠龙刀,断肠草,葵花宝典,四十二章经
//逆向遍历:
//四十二章经,葵花宝典,断肠草,屠龙刀,倚天剑
}
}
}
《C#设计模式》==>迭代器模式
最新推荐文章于 2024-09-12 14:26:16 发布