鍍金池/ 教程/ Java/ Java迭代器模式
Java前端控制器模式
Java工廠設(shè)計(jì)模式
Java抽象工廠模式
Java觀察者模式
Java門(mén)面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對(duì)象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過(guò)濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過(guò)濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計(jì)模式
Java空對(duì)象模式
Java數(shù)據(jù)訪問(wèn)對(duì)象模式
Java訪問(wèn)者模式
Java組合實(shí)體模式
Java服務(wù)定位器模式

Java迭代器模式

迭代器模式是Java.Net編程環(huán)境中非常常用的設(shè)計(jì)模式。此模式用于以順序方式訪問(wèn)集合對(duì)象的元素,而不需要知道其底層表示。

迭代器模式屬于行為模式類別。

實(shí)現(xiàn)實(shí)例

在這個(gè)實(shí)例中,將創(chuàng)建一個(gè)Iterator接口,它陳述了一個(gè)導(dǎo)航方法和一個(gè)Container接口,以及返回迭代器。 實(shí)現(xiàn)Container接口的具體類將負(fù)責(zé)實(shí)現(xiàn)Iterator接口并使用它。

IteratorPatternDemo這是一個(gè)演示類,將使用一個(gè)具體的實(shí)現(xiàn)類-NamesRepository,打印一個(gè)存儲(chǔ)在NamesRepository集合中的Names。

迭代器模式的實(shí)現(xiàn)實(shí)例結(jié)構(gòu)如下圖中所示 -

第1步

創(chuàng)建兩個(gè)簡(jiǎn)單的接口,如下代碼所示 -
Iterator.java

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

Container.java

public interface Container {
   public Iterator getIterator();
}

第2步

創(chuàng)建實(shí)現(xiàn)Container接口的具體類。 這個(gè)類有一個(gè)內(nèi)部類NameIterator,它實(shí)現(xiàn)了Iterator接口。
NameRepository.java

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;
      }        
   }
}

第3步

使用NameRepository獲取迭代器并打印其名稱。
IteratorPatternDemo.java

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);
      }     
   }
}

第4步

驗(yàn)證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Name : Robert
Name : John
Name : Julie
Name : Lora