国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

迭代器模式

LuDongWei / 441人閱讀

摘要:不暴露該對(duì)象的內(nèi)部表示是指在通過(guò)迭代器訪問(wèn)聚合中元素時(shí)迭代器訪問(wèn)接口統(tǒng)一不用關(guān)心對(duì)象內(nèi)部細(xì)節(jié)。雖然靈活但是調(diào)用復(fù)雜度增加必須熟悉迭代器接口。

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

關(guān)于這個(gè)定義的個(gè)人理解,聚合對(duì)象是指可遍歷的對(duì)象,一般具有的特征就是可用下標(biāo)訪問(wèn)且具有l(wèi)ength屬性。

不暴露該對(duì)象的內(nèi)部表示是指在通過(guò)迭代器訪問(wèn)聚合中元素時(shí),迭代器訪問(wèn)接口統(tǒng)一,不用關(guān)心對(duì)象內(nèi)部細(xì)節(jié)。

迭代器分類 內(nèi)部迭代器
內(nèi)部迭代器是指外界不用關(guān)心迭代器內(nèi)部實(shí)現(xiàn),初始調(diào)用一次迭代器就可以實(shí)現(xiàn)遍歷功能了。
    
        let each=function (ary,cb) {
            for(let i=0,len=ary.length;i
外部迭代器

外部迭代器是指必須顯式的請(qǐng)求迭代下一個(gè)元素

    class Iterator{
    
        constructor(obj){
            this.obj=obj;
            this.current=0;
        }
        next() {
            this.current+=1;
        }
        isDone() {
            return this.current>=this.obj.length
        }
        getCurrentItem () {
            return this.obj[this.current];
        }
    }
    
    let iterator1=new Iterator([1,2,3]);
    console.log(iterator1.next())
    console.log(iterator1.getCurrentItem())  //2
    

外部迭代器相對(duì)內(nèi)部迭代器的優(yōu)點(diǎn)是,可以手工控制迭代過(guò)程。雖然靈活,但是調(diào)用復(fù)雜度增加,必須熟悉迭代器接口。

實(shí)戰(zhàn)應(yīng)用 案例一
let getUploadObjA=function () {
    try{
        throw "testA";
    }catch (e){
        return false;
    }
}
let getUploadObjB=function () {
    return "testB";
}
let getUploadObjC=function () {
    try{
        throw "testC";
    }catch (e){
        return false;
    }
}

let iteratorUploadObj=function () {
    for(let i=0,len=arguments.length;i

說(shuō)明 其實(shí)在日常開(kāi)發(fā)中,例如上傳文件有很多方式,插件,h5,input的file方式等等,根據(jù)兼容性,設(shè)定支持的先后順序放在迭代器中,以后維護(hù)時(shí)時(shí)若有其它方式
直接往迭代器中添加就行,非常方便。總的來(lái)說(shuō)就是方便代碼維護(hù)且具有良好的拓展性。

案例2
let isType=function (type) {
    return function (obj) {
        return Object.prototype.toString.call(obj)==="[object "+type+"]";
    }
}

let isWindow=isType("Window");

function isArraylike(obj) {
    let len="length" in obj &&obj.length;
    let typeObj=typeof obj;
    let typeLen=typeof len;
    
    if(typeObj ==="function" ||isWindow(obj)){
        return false;
    }
    //Element
    if(obj.nodeType==1&&len){
        return true;
    }
    return typeObj === "array" ||len===0 ||typeLen =="number" &&len>0 &&(len-1) in obj;
}
each=function (obj,cb) {
    let value,
        i=0,
        length=obj.length,
        isArray=isArraylike(obj);
    if(isArray){
        for(;i

說(shuō)明 上面實(shí)現(xiàn)了一個(gè)通用的迭代器。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/66731.html

相關(guān)文章

  • Python進(jìn)階:設(shè)計(jì)模式迭代模式

    摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計(jì)模式中最常用的設(shè)計(jì)模式,本文主要介紹了是如何運(yùn)用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開(kāi)發(fā)領(lǐng)域中,人們經(jīng)常會(huì)用到這一個(gè)概念——設(shè)...

    pubdreamcc 評(píng)論0 收藏0
  • Python進(jìn)階:設(shè)計(jì)模式迭代模式

    摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計(jì)模式中最常用的設(shè)計(jì)模式,本文主要介紹了是如何運(yùn)用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開(kāi)發(fā)領(lǐng)域中,人們經(jīng)常會(huì)用到這一個(gè)概念——設(shè)...

    sherlock221 評(píng)論0 收藏0
  • 迭代模式

    摘要:迭代器模式的結(jié)構(gòu)抽象容器一般是一個(gè)接口,提供一個(gè)方法,例如中的接口,接口,接口等。假如我們要實(shí)現(xiàn)一個(gè)這樣的新的容器,當(dāng)然也需要引入迭代器模式,給我們的容器實(shí)現(xiàn)一個(gè)迭代器。 定義:提供一種方法訪問(wèn)一個(gè)容器對(duì)象中各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部細(xì)節(jié)。 類型:行為類模式。 類圖:showImg(https://segmentfault.com/img/bVWQIQ?w=542&h=287);...

    xcc3641 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式·迭代模式

    摘要:迭代器模式原文地址更多設(shè)計(jì)模式系列教程更多免費(fèi)教程博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。迭代器模式常見(jiàn)和常用的有內(nèi)部迭代器外部迭代器倒序迭代器等等。 迭代器模式·原文地址 更多《設(shè)計(jì)模式系列教程》 更多免費(fèi)教程 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(靠這吃飯)和python(純粹喜歡...

    沈儉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<