迭代器模式:讓客戶遍歷你的物件而又無法窺視你儲存物件的方式
場景:又乙個早餐選單和乙個午餐選單,使用迭代器模式將兩個選單列印出來。
//選單建立迭代器的介面
//類似工廠模式,子類需要實現建立列舉物件的方法
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...