<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **定義:**迭代器模式(IteratorPattern),提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。 類型:對象行為型模式 **概述:** ? ? 正如定義所言,迭代器是為解決更好的訪問一個聚合對象中的各個元素而產生的。迭代器是對象行為模式,也即它主要是通過將對象中的訪問行為提取出來作為迭代器類。迭代器的產生,主要是為了解決客戶端對聚合對象內部元素訪問時可能造成的耦合。 ????????為了使得迭代器能夠訪問更多的聚合對象,所以需要面向接口編程,即為迭代器和聚合對象分別提供統一接口。 ???????? C++中的STL庫、C#,Java的泛型類型都有封裝迭代器,所以下面的示例重點了解迭代器的工作原理。 ????????舉一個簡單示例,有一個圖書館,存有許多圖書。一天,有讀者來借書,這個時候就可以使用迭代器模式了。迭代器將一系列圖書的遍歷查找定位等操作抽象出來形成一個迭代器類。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b4672698f.jpg) 參與者: 1. Client,生成具體的NationalLibrary以及具體的ConcreteIterator對象。 1. Library,提供聚合對象的抽象接口。 1. NationalLibrary,實現接口,并返回一個ConcreteIterator的對象。 1. Iterator,迭代器接口類。 1. ConcreteIterator,完成接口實現遍歷查找。 示例代碼: ~~~ using System; using System.Collections.Generic; using System.Text; namespace IteratorSpace { class Program { abstract class Library { public abstract Iterator CreateIterator(); } class NationalLibrary : Library { 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); } } } abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool End(); public abstract object CurrentItem(); } class ConcreteIterator : Iterator { private NationalLibrary library; private int current = 0; public ConcreteIterator(NationalLibrary _library) { this.library = _library; } public override object First() { return library[0]; } public override object Next() { object ret = null; current++; if (current < library.Count) { ret = library[current]; } return ret; } public override object CurrentItem() { return library[current]; } public override bool End() { return current >= library.Count ? true : false; } } static void Main(string[] args) { NationalLibrary library = new NationalLibrary(); library[0] = "C++ Primer"; library[1] = "C Program"; library[2] = "Design Pattern"; Iterator iter = new ConcreteIterator(library); while (!iter.End()) { Console.WriteLine("This book is {0}!", iter.CurrentItem()); iter.Next(); } } } } ~~~ 適用性: 1. 訪問一個聚合對象的內容而無需暴露它的內部表示。 1. 支持對聚合對象的多種遍歷。 1. 為遍歷不同的聚合結構提供一個統一的接口(即,支持多態迭代) 優缺點: 1. 優點,簡化遍歷過程,降低客戶端與聚合對象之間的耦合性。 1. 缺點,如果是簡單聚合對象使用迭代器反倒復雜,另外新添聚合類以及迭代器類過多時,也會造成類過多而復雜 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《大話設計模式》 1. 《Head?First設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看