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設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- 23天設計模式之迭代器模式設計模式
- 16.java設計模式之迭代器模式Java設計模式
- js設計模式--迭代器模式JS設計模式
- JS設計模式(迭代器模式)JS設計模式
- 設計模式(十七)迭代器模式設計模式
- 軟體設計模式系列之十八——迭代器模式設計模式
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- 簡說設計模式——迭代器模式設計模式
- 極簡設計模式-迭代器模式設計模式
- 設計模式(二十四)----行為型模式之迭代器模式設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 設計模式(十六)迭代器設計模式
- C#設計模式之命令模式C#設計模式
- 初學設計模式(java版)一:行為型模式之--Iterator模式(迭代器模式)設計模式Java
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之享元模式C#設計模式
- C#設計模式之狀態模式C#設計模式
- C#設計模式之組合模式C#設計模式
- 軟體設計模式學習(二十)迭代器模式設計模式
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- 迭代器設計模式知識概括設計模式
- C#設計模式之職責鏈模式C#設計模式
- C#設計模式之訪問者模式C#設計模式
- C#設計模式之介面卡模式C#設計模式
- 「補課」進行時:設計模式(13)——迭代器模式設計模式
- 《JavaScript設計模式與開發實踐》模式篇(4)—— 迭代器模式JavaScript設計模式
- C#設計模式之訂閱釋出模式C#設計模式
- 設計模式之-裝飾器模式設計模式
- 設計模式之直譯器模式設計模式
- 設計模式之【裝飾器模式】設計模式
- C#設計模式-裝飾器模式(Decorator Pattern)C#設計模式
- 設計模式系列之迭代器模式(Iterator Pattern)——遍歷聚合物件中的元素設計模式物件
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼