日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

通俗易懂設(shè)計(jì)模式解析——迭代器模式

 路人甲Java 2020-06-22

前言

  今天我們一起看看行為模式中的迭代器模式,迭代是重復(fù)反饋過程的活動(dòng),其目的通常是為了接近并到達(dá)所需的目標(biāo)或結(jié)果。在系統(tǒng)開發(fā)中簡(jiǎn)單說可以理解成遍歷。這種模式用于順序訪問集合對(duì)象的元素,不需要知道集合對(duì)象的底層或者內(nèi)部表示。

迭代器模式介紹

一、來(lái)由

  在系統(tǒng)開發(fā)中,集合對(duì)象內(nèi)部表示各不相同。底層構(gòu)造也盡不相同。對(duì)于這些對(duì)象,我們希望在不暴露其底層和內(nèi)部表示的同時(shí),可以使外部客戶訪問其中元素。迭代器模式就為這一需求提供了極其優(yōu)雅的實(shí)現(xiàn)。

二、意圖

  提供一種方法順序訪問一個(gè)聚合對(duì)象中各個(gè)元素, 而又無(wú)須暴露該對(duì)象的內(nèi)部表示。

三、案例圖

 

四、迭代器模式代碼示例

我們從上面的案例圖可見,迭代器模式主要包含以下四個(gè)部分:

抽象迭代器:定義了訪問和遍歷元素的接口,然后在其子類中實(shí)現(xiàn)這些方法。

具體迭代器:實(shí)現(xiàn)抽象迭代器接口,完成對(duì)集合對(duì)象的遍歷。同時(shí)對(duì)遍歷時(shí)的位置進(jìn)行跟蹤。

抽象聚合類:主要用于儲(chǔ)存對(duì)象,創(chuàng)建相應(yīng)的迭代器對(duì)象的接口。帶有一個(gè)createIterator()方法用于創(chuàng)建迭代器對(duì)象。

具體聚合類:實(shí)現(xiàn)創(chuàng)建相應(yīng)的迭代器對(duì)象的接口,實(shí)現(xiàn)createIterator()方法,并且返回與該具體聚合相對(duì)應(yīng)的具體迭代器ConcreteIterator實(shí)例。

介紹完迭代器模式之后,接下來(lái)我們具體來(lái)看看迭代器模式的具體實(shí)現(xiàn)吧。具體如下:

namespace Iterator_Pattern
{class IteratorPattern
    {
    }/// <summary>/// 抽象聚合類、包含一個(gè)創(chuàng)建迭代器對(duì)象的方法/// </summary>public interface IListAggregate
    {
        Iterator GetIterator();
    }/// <summary>/// 抽象迭代器、包含訪問和遍歷元素的方法/// </summary>public interface Iterator
    {/// <summary>/// 是否有下一個(gè)元素/// </summary>/// <returns></returns>bool IsNext();/// <summary>/// 獲取當(dāng)前元素位置/// </summary>/// <returns></returns>object GetCurrentIndex();/// <summary>/// 獲取下一個(gè)元素/// </summary>void Next();/// <summary>/// 獲取第一個(gè)元素、相當(dāng)于重置/// </summary>void Start();
    }/// <summary>/// 具體聚合類/// </summary>public class ConcreteListAggregate : IListAggregate
    { string[] list;public ConcreteListAggregate()
        {
            list = new string[] { "張三", "李四", "王五", "趙六" };
        }/// <summary>/// 創(chuàng)建迭代器對(duì)象/// </summary>/// <returns></returns>public Iterator GetIterator()
        {return new ConcreteIterator(this);
        }/// <summary>/// 獲取對(duì)象長(zhǎng)度/// </summary>public int Length
        {get { return list.Length; }
        }/// <summary>/// 獲取指定位置元素/// </summary>/// <param name="index"></param>/// <returns></returns>public object GetItem(int index)
        {return list[index];
        } 
    }public class ConcreteIterator : Iterator
    {private ConcreteListAggregate _list;private int _index;public ConcreteIterator(ConcreteListAggregate list)
        {
            _list = list;
            _index = 0;

        }public object GetCurrentIndex()
        {return _list.GetItem(_index);
        }public bool IsNext()
        {if (_index<_list.Length)
            {return true;
            }return false;
        }public void Next()
        {if (_index<_list.Length)
            {
                _index++;
            }
        }public void Start()
        {
            _index = 0;
        }
    }
}
namespace Iterator_Pattern
{class Program
    {static void Main(string[] args)
        {//獲取迭代器對(duì)象IListAggregate listAggregate = new ConcreteListAggregate();
            Iterator iterator = listAggregate.GetIterator(); while (iterator.IsNext())
            {var result = iterator.GetCurrentIndex();
                Console.WriteLine(result);
                iterator.Next();

            }
        }
    }
}

使用場(chǎng)景及優(yōu)缺點(diǎn)

一、使用場(chǎng)景

1、訪問聚合對(duì)象的內(nèi)容不需要暴露其內(nèi)部表示。

2、需要為聚合對(duì)象提供多種遍歷方式。

3、為了遍歷不同的聚合結(jié)構(gòu)對(duì)象提供統(tǒng)一的接口

二、優(yōu)點(diǎn)

1、訪問聚合對(duì)象內(nèi)容時(shí)無(wú)需暴露其內(nèi)部表示。

2、迭代器模式為不同的聚合結(jié)構(gòu)對(duì)象提供了統(tǒng)一的接口。

3、在同一個(gè)聚合對(duì)象上可以實(shí)現(xiàn)多種遍歷。

4、增加新的聚合類和迭代類較為方便,無(wú)需修改之前的代碼

三、缺點(diǎn)

1迭代器模式將存儲(chǔ)數(shù)據(jù)和遍歷數(shù)據(jù)的責(zé)任進(jìn)行了分離。增加新的聚合類型的時(shí)候需要增加新的迭代器類。存在成對(duì)增加的。增加了系統(tǒng)的復(fù)雜性。

總結(jié)

  迭代器模式到這里就介紹完了。迭代器模式就是通過迭代器類將集合對(duì)象的遍歷行為進(jìn)行區(qū)分開來(lái)。這樣一來(lái)就可以不暴露集合對(duì)象的內(nèi)部表示了。又可以使外部能正常的使用訪問其元素。這個(gè)模式并不復(fù)雜。把握好其中每個(gè)角色的職責(zé),進(jìn)行連貫就好了。在.Net中我們也可以發(fā)現(xiàn)一個(gè)現(xiàn)成的迭代器模式。這也是最好的教程案例。IEnumerable作為了一個(gè)抽象聚合類、IEnumerator作為一個(gè)抽象迭代器。在System.Collections命名空間之下。有興趣深究的可以去研究下。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多