国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式——迭代器模式(Iterator Pattern)+ Spring相關(guān)源碼

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式——迭代器模式(Iterator Pattern)+ Spring相關(guān)源碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、迭代器模式

類(lèi)型: 行為型模式
目的: 用于順序訪問(wèn)集合對(duì)象的元素,使用者不需要知道集合對(duì)象的底層表示。

二、例子

2.1 菜鳥(niǎo)例子

2.1.1 定義迭代器接口

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

2.1.2 定義迭代對(duì)象接口——用于返回一個(gè)迭代器

public interface Container {
   public Iterator getIterator();
}

2.1.3 實(shí)現(xiàn) 迭代對(duì)象 和 迭代器

public class NameRepository implements Container {
   public String[] names = {"Robert" , "John" ,"Julie" , "Lora"};
 
   @Override
   public Iterator getIterator() {
      return new NameIterator();
   }
 
   private class NameIterator implements Iterator {
 
      int index;
 
      @Override
      public boolean hasNext() {
         if(index < names.length){
            return true;
         }
         return false;
      }
 
      @Override
      public Object next() {
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }     
   }
}

2.1.4 使用

public class IteratorPatternDemo {
   
   public static void main(String[] args) {
      NameRepository namesRepository = new NameRepository();
 
      for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
         String name = (String)iter.next();
         System.out.println("Name : " + name);
      }  
   }
}

2.2 JDK源碼——ArrayList

private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
	 @Override
     public Iterator<E> iterator() {
        return new ArrayItr<>(a);
     }
}
private static class ArrayItr<E> implements Iterator<E> {
    private int cursor;
    private final E[] a;

    ArrayItr(E[] a) {
        this.a = a;
    }

    @Override
    public boolean hasNext() {
        return cursor < a.length;
    }

    @Override
    public E next() {
        int i = cursor;
        if (i >= a.length) {
            throw new NoSuchElementException();
        }
        cursor = i + 1;
        return a[i];
    }
}

2.3 Spring源碼——DefaultListableBeanFactory

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {

	private volatile List<String> beanDefinitionNames;
    private volatile Set<String> manualSingletonNames;

    public Iterator<String> getBeanNamesIterator() {
        CompositeIterator<String> iterator = new CompositeIterator();
        iterator.add(this.beanDefinitionNames.iterator());
        iterator.add(this.manualSingletonNames.iterator());
        return iterator;
    }
}

迭代器CompositeIterator

public class CompositeIterator<E> implements Iterator<E> {
    private final Set<Iterator<E>> iterators = new LinkedHashSet();
    private boolean inUse = false;

    public CompositeIterator() {
    }

    public void add(Iterator<E> iterator) {
        Assert.state(!this.inUse, "You can no longer add iterators to a composite iterator that's already in use");
        if (this.iterators.contains(iterator)) {
            throw new IllegalArgumentException("You cannot add the same iterator twice");
        } else {
            this.iterators.add(iterator);
        }
    }

    public boolean hasNext() {
        this.inUse = true;
        Iterator var1 = this.iterators.iterator();

        Iterator iterator;
        do {
            if (!var1.hasNext()) {
                return false;
            }

            iterator = (Iterator)var1.next();
        } while(!iterator.hasNext());

        return true;
    }

    public E next() {
        this.inUse = true;
        Iterator var1 = this.iterators.iterator();

        Iterator iterator;
        do {
            if (!var1.hasNext()) {
                throw new NoSuchElementException("All iterators exhausted");
            }

            iterator = (Iterator)var1.next();
        } while(!iterator.hasNext());

        return iterator.next();
    }

    public void remove() {
        throw new UnsupportedOperationException("CompositeIterator does not support remove()");
    }
}


三、其他設(shè)計(jì)模式

創(chuàng)建型模式
結(jié)構(gòu)型模式

  • 1、設(shè)計(jì)模式——裝飾器模式(Decorator Pattern)+ Spring相關(guān)源碼

行為型模式文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-744530.html

  • 1、設(shè)計(jì)模式——訪問(wèn)者模式(Visitor Pattern)+ Spring相關(guān)源碼
  • 2、設(shè)計(jì)模式——中介者模式(Mediator Pattern)+ JDK相關(guān)源碼
  • 3、設(shè)計(jì)模式——策略模式(Strategy Pattern)+ Spring相關(guān)源碼
  • 4、設(shè)計(jì)模式——狀態(tài)模式(State Pattern)
  • 5、設(shè)計(jì)模式——命令模式(Command Pattern)+ Spring相關(guān)源碼
  • 6、設(shè)計(jì)模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼
  • 7、設(shè)計(jì)模式——備忘錄模式(Memento Pattern)
  • 8、設(shè)計(jì)模式——模板方法模式(Template Pattern)+ Spring相關(guān)源碼
  • 9、設(shè)計(jì)模式——迭代器模式(Iterator Pattern)+ Spring相關(guān)源碼
  • 10、設(shè)計(jì)模式——責(zé)任鏈模式(Chain of Responsibility Pattern)+ Spring相關(guān)源碼
  • 11、設(shè)計(jì)模式——解釋器模式(Interpreter Pattern)+ Spring相關(guān)源碼

到了這里,關(guān)于設(shè)計(jì)模式——迭代器模式(Iterator Pattern)+ Spring相關(guān)源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式——命令模式(Command Pattern)+ Spring相關(guān)源碼

    類(lèi)型: 行為型模式 目的: 將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而使您可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化。 2.1.1 定義命令類(lèi)接口 2.1.2 定義命令執(zhí)行者 2.1.3 被處理對(duì)象Stock。 菜鳥(niǎo)教程定義 被處理的對(duì)象 是Stock。 2.1.4 封裝處理Stock的命令 雖然 Runnable 接口本身并不是一個(gè)命令模式

    2024年02月06日
    瀏覽(24)
  • 設(shè)計(jì)模式——裝飾器模式(Decorator Pattern)+ Spring相關(guān)源碼

    別名:包裝模式(Wrapper Pattern) 類(lèi)型:結(jié)構(gòu)型模式。 目的:指在不改變現(xiàn)有對(duì)象結(jié)構(gòu)的情況下,動(dòng)態(tài)地給該對(duì)象增加一些職責(zé)額外功能。 給對(duì)象添加新功能時(shí),并不是在對(duì)象類(lèi)中直接添加,而是在裝飾器類(lèi)中添加。 在裝飾類(lèi)中添加新功能,你可以增強(qiáng)原先對(duì)象的方法,也可

    2024年02月06日
    瀏覽(19)
  • 設(shè)計(jì)模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼

    類(lèi)型:行為型模式 目的:當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴(lài)者(觀察者)都會(huì)收到通知并自動(dòng)更新。 2.1.1 定義觀察者 2.1.2 定義被觀察對(duì)象 2.1.3 使用 2.2.1 觀察者接口Observer 2.2.1 被觀察者對(duì)象Observable 2.3.1 觀察者 2.3.2 被觀察者 創(chuàng)建型模式 結(jié)構(gòu)型模式 1、設(shè)計(jì)模式——

    2024年02月06日
    瀏覽(23)
  • 設(shè)計(jì)模式——責(zé)任鏈模式(Chain of Responsibility Pattern)+ Spring相關(guān)源碼

    類(lèi)型: 行為型模式 每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依此類(lèi)推。 目的: 職責(zé)鏈上的處理者負(fù)責(zé)處理請(qǐng)求,客戶只需要將請(qǐng)求發(fā)送到職責(zé)鏈上即可,無(wú)須關(guān)心請(qǐng)求的處理細(xì)節(jié)和請(qǐng)求的傳遞,所

    2024年02月05日
    瀏覽(23)
  • 設(shè)計(jì)模式第16講——迭代器模式(Iterator)

    設(shè)計(jì)模式第16講——迭代器模式(Iterator)

    迭代器模式是一種 行為型 設(shè)計(jì)模式,它提供了一種 統(tǒng)一的方式來(lái)訪問(wèn)集合對(duì)象中的元素,而不是暴露集合內(nèi)部的表示方式 。簡(jiǎn)單地說(shuō),就是將遍歷集合的責(zé)任封裝到一個(gè)單獨(dú)的對(duì)象中,我們可以按照特定的方式訪問(wèn)集合中的元素。 抽象迭代器(Iterator):定義了遍歷聚合對(duì)

    2024年02月11日
    瀏覽(21)
  • 設(shè)計(jì)模式之迭代器模式(Iterator)的C++實(shí)現(xiàn)

    設(shè)計(jì)模式之迭代器模式(Iterator)的C++實(shí)現(xiàn)

    在軟件開(kāi)發(fā)過(guò)程中,操作的集合對(duì)象內(nèi)部結(jié)構(gòu)常常變化,在訪問(wèn)這些對(duì)象元素的同時(shí),也要保證對(duì)象內(nèi)部的封裝性。迭代器模式提供了一種利用面向?qū)ο蟮谋闅v方法來(lái)遍歷對(duì)象元素。迭代器模式通過(guò)抽象一個(gè)迭代器類(lèi),不同的對(duì)象繼承自迭代器類(lèi),外部通過(guò)統(tǒng)一接口訪問(wèn)元素

    2024年02月11日
    瀏覽(22)
  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——迭代器模式Iterator(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——迭代器模式Iterator(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    編寫(xiě)程序展示一個(gè)學(xué)校院系結(jié)構(gòu): 需求是這樣,要在一個(gè)頁(yè)面中展示出學(xué)校的院系組成,一個(gè)學(xué)校有多個(gè)學(xué)院,一個(gè)學(xué)院有多個(gè)系 【傳統(tǒng)方式】 將學(xué)院看做是學(xué)校的子類(lèi),系是學(xué)院的子類(lèi),小的組織繼承大的組織 分析: 在一個(gè)頁(yè)面中展示出學(xué)校的院系組成,一個(gè)學(xué)校有多個(gè)

    2024年02月14日
    瀏覽(25)
  • 迭代器模式(Iterator Pattern)

    迭代器模式(Iterator Pattern)

    一、定義 提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素,而又不需要暴露該對(duì)象的內(nèi)部表示。 二、優(yōu)缺點(diǎn) 優(yōu)點(diǎn): ?1、它支持以不同的方式遍歷一個(gè)聚合對(duì)象。 2、迭代器簡(jiǎn)化了聚合類(lèi)。 3、在同一個(gè)聚合上可以有多個(gè)遍歷。 4、在迭代器模式中,增加新的聚合類(lèi)和迭代器類(lèi)

    2024年02月09日
    瀏覽(22)
  • (三)行為模式:4、迭代器模式(Iterator Pattern)(C++示例)

    (三)行為模式:4、迭代器模式(Iterator Pattern)(C++示例)

    目錄 1、迭代器模式(Iterator Pattern)含義 2、迭代器模式的UML圖學(xué)習(xí) 3、迭代器模式的應(yīng)用場(chǎng)景 4、迭代器模式的優(yōu)缺點(diǎn) (1)優(yōu)點(diǎn) (2)缺點(diǎn) 5、C++實(shí)現(xiàn)迭代器模式的實(shí)例 1、迭代器模式(Iterator Pattern)含義 迭代器模式(Iterator),提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元

    2024年02月11日
    瀏覽(34)
  • java常見(jiàn)面試題:什么是迭代器模式(Iterator Pattern)?如何實(shí)現(xiàn)迭代器模式?

    迭代器模式(Iterator Pattern)是設(shè)計(jì)模式中的一種,它提供了一種順序訪問(wèn)一個(gè)聚合對(duì)象(如列表、集合等)中各個(gè)元素的方法,而又不需要暴露該對(duì)象的內(nèi)部表示。使用迭代器模式,可以方便地遍歷一個(gè)聚合對(duì)象的所有元素,而不需要了解該對(duì)象的底層結(jié)構(gòu)。 迭代器模式主

    2024年01月18日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包