C#設計模式之迭代器模式
前言
介紹比較少,直接看程式碼吧。也是一個很容易懂的模式~
迭代器模式
英文:Iterator
what:
提供一種方法順序訪問一個聚合物件中各個元素,而又不暴露該物件的內部表示。
場景
坐火車時檢票人員會遍歷車廂的每一個人,不放過任何一個不買票的乘客。這就體現了迭代器模式。
應用
當你訪問一個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,就可以考慮迭代器模式。
需要對聚集有多種 方式遍歷時,也可以考慮迭代器模式。
程式碼展示
迭代器抽象類:
//迭代器抽象類
abstract class Iterator
{
//用於定義1234統一介面
public abstract object First();//1開始物件
public abstract object Next();//2得到下一個物件
public abstract bool IsDone();//3判斷是否到結尾
public abstract object CurrentItem();//4當前物件
}
聚集抽象類:
//聚集抽象類
abstract class Aggregate
{
public abstract Iterator CreateIterator();//建立迭代器
}
具體迭代器類:繼承迭代器抽象類:
//具體迭代器類
class ConcreteIterator:Iterator
{
private ConcreteAggregate aggregate;//定義一個具體聚集物件
private int current = 0;
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;//初始化時將具體的聚集物件傳入
}
public override object First()//得到聚集的第一個物件
{
return aggregate[0];
}
public override object Next()//得到聚集的下一個物件
{
object ret = null;
current++;
if (current < aggregate.Count)
{
ret = aggregate[current];
}
return ret;
}
public override bool IsDone()//判斷當前是否遍歷到結尾,到結尾返回true
{
return current >= aggregate.Count ? true : false;
}
public override object CurrentItem()
{
return aggregate[current];//返回當前的聚集物件
}
}
具體聚集類:繼承聚集抽象類:
//具體聚集類
class ConcreteAggregate:Aggregate
{
private IList<object> items = new List<object>();
public override Iterator CreateIterator()
{
return new ConcreteIterator(this);
}
public int Count
{
get { return items.Count; }
}
public object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}
客戶端程式碼:
class Program
{
static void Main(string[] args)
{
ConcreteAggregate monkey = new ConcreteAggregate();
monkey[0] = "猴子";
monkey[1] = "劉木同";
monkey[2] = "笨蛋";
monkey[3] = "小弟";
monkey[4] = "領導";
monkey[5] = "內部人員";
monkey[6] = "小偷";
Iterator i = new ConcreteIterator(monkey);
object item = i.First();//從第一個乘客開始
while (!i.IsDone())
{
Console.WriteLine("{0}請買火車票",i.CurrentItem ());//若沒買票,請補票
i.Next();//遍歷下一個
}
Console.Read();
}
}
圖示效果:
後記
敲完了這個就想到了介面卡模式。感覺這兩個模式都是很好用也挺簡單的。設計模式很重要也是一個很有實踐力的學習模組,以後還會再深入學習的~
相關文章
- 設計模式之迭代器模式設計模式
- golang設計模式之迭代器模式Golang設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- C#設計模式系列:迭代器模式(Iterator)C#設計模式
- 23天設計模式之迭代器模式設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- 23種設計模式之迭代器模式設計模式
- 16.java設計模式之迭代器模式Java設計模式
- JAVA設計模式之 迭代器模式【Iterator Pattern】Java設計模式
- PHP設計模式漫談之迭代器模式PHP設計模式
- 設計模式(十七)迭代器模式設計模式
- js設計模式--迭代器模式JS設計模式
- JS設計模式(迭代器模式)JS設計模式
- 軟體設計模式系列之十八——迭代器模式設計模式
- 設計模式學習筆記之迭代器模式設計模式筆記
- 簡說設計模式——迭代器模式設計模式
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- 極簡設計模式-迭代器模式設計模式
- Java設計模式8:迭代器模式Java設計模式
- 設計模式(二十四)----行為型模式之迭代器模式設計模式
- 設計模式(十六)迭代器設計模式
- 設計模式之迭代子模式設計模式
- 設計模式-行為篇(迭代器模式)設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 初學設計模式(java版)一:行為型模式之--Iterator模式(迭代器模式)設計模式Java
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- 17、Python與設計模式–迭代器模式Python設計模式
- 設計模式--迭代器模式Iterator(行為型)設計模式
- C#設計模式之命令模式C#設計模式
- 軟體設計模式學習(二十)迭代器模式設計模式
- 設計模式的征途—21.迭代器(Iterator)模式設計模式
- 迭代器設計模式知識概括設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之狀態模式C#設計模式
- C#設計模式之享元模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之代理模式(四)C#設計模式
- C#設計模式之代理模式(三)C#設計模式