迭代器模式(Iterator Pattern)

2021-07-30 11:44:47 字數 1597 閱讀 7771

迭代器模式:讓客戶遍歷你的物件而又無法窺視你儲存物件的方式

場景:又乙個早餐選單和乙個午餐選單,使用迭代器模式將兩個選單列印出來。

//選單建立迭代器的介面

//類似工廠模式,子類需要實現建立列舉物件的方法

public inte***ce menu

//選單子項

public class menuitem

public string getname()

public string getdescription()

public double getprice()

public bool isvegetarian()

}

//早餐選單

public class pancakehousemenu :menu

public void additem(string name, string description, bool vegetarian, double price)

public listgetmenuitems()

//早餐選單在list中,list本身支援獲取列舉物件

public ienumerator createiterator()

}

//午餐選單

public class dinermenu : menu, ienumerator

public void additem(string name, string description, bool vegetarian, double price)

else

}public menuitem getmenuitems()

public object current

}public bool movenext()

else

}public void reset()

//午餐繼承並實現了ienumerator的介面,自身便包含了列舉物件

public ienumerator createiterator()

}

//服務員輸出選單

public class waitress

public void printmenu()

//利用c#對列舉的支援進行遍歷

private void printmenu(ienumerator ienumerator)

else}}

}

//測試用例

static void main(string args)

//測試結果

總結:1.提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的表示。

2.把遊走的任務放在迭代器上,而不是聚合上。這樣簡化了聚合的介面和實現,也讓責任各得其所。

擴充套件:單一責任:乙個類應該只有乙個引起變化的原因。

迭代器模式

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而不是暴露該物件的內部表示。乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,你就應該考慮用迭代器模式。你需要對聚集有多種方式遍歷時,可以考慮用迭代器模式。為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等統一...

迭代器模式

我最早接觸的設計模式就是迭代器模式了哈 為什麼要有迭代器模式呢?看下下面的 就知道了哈 對於乙個陣列物件sz 我們要怎麼遍歷呢?public void bianlisz class geweishu public myiterator getiterator private class geweis...

迭代器模式

迭代器模式 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件多的內部表示。1 iterator抽象類 public abstract class iterator 2 aggregate聚集抽象類 public abstract class aggregate 3 concreteite...