>  기사  >  Java  >  Java 디자인 패턴의 Iterator 패턴 소개

Java 디자인 패턴의 Iterator 패턴 소개

高洛峰
高洛峰원래의
2017-01-19 16:06:081244검색

1. 먼저 컨테이너 Collection 인터페이스를 정의합니다.

package com.njupt.zhb.learn.iterator;
public interface Collection {
 void add(Object o);
 int size();
 Iterator iterator();
}

2. Iterator 인터페이스를 정의합니다.

package com.njupt.zhb.learn.iterator;
public interface Iterator {
 Object next();
 boolean hasNext();
}

3. ArrayList를 정의하고 Collection 인터페이스를 구현한 다음 반복자 인터페이스.

package com.njupt.zhb.learn.iterator;
import com.njupt.zhb.learn.iterator.Collection;
public class ArrayList implements Collection {
 Object[] objects = new Object[10];
 int index = 0;
 public void add(Object o) {
  if(index == objects.length) {
   Object[] newObjects = new Object[objects.length * 2];
   System.arraycopy(objects, 0, newObjects, 0, objects.length);
   objects = newObjects;
  }
  objects[index] = o;
  index ++;
 }

 public int size() {
  return index;
 }

 public Iterator iterator() {

  return new ArrayListIterator();
 }

 private class ArrayListIterator implements Iterator {
  private int currentIndex = 0;
  @Override
  public boolean hasNext() {
   if(currentIndex >= index) return false;
   else return true;
  }
  @Override
  public Object next() {
   Object o = objects[currentIndex];
   currentIndex ++;
   return o;
  }

 }
}

4. 테스트 프로그램 TestMain

package com.njupt.zhb.learn.iterator;
import com.njupt.zhb.learn.iterator.ArrayList;
public class TestMain {
 public static void main(String[] args) {
  Collection c = new ArrayList();
  for(int i=0; i<15; i++) {
   c.add("string "+i);
  }
  System.out.println(c.size());
  Iterator it = c.iterator();
  while(it.hasNext()) {
   Object o = it.next();
   System.out.println(o.toString() + " ");
  }
 }
}

작성 실행 결과:

15
string 0 
string 1 
string 2 
string 3 
string 4 
string 5 
string 6 
string 7 
string 8 
string 9 
string 10 
string 11 
string 12 
string 13 
string 14

위에서 볼 수 있듯이 디자인 패턴은 어디에서나 객체 지향 다형성을 사용합니다. 인터페이스는 서브클래스의 함수를 호출합니다.

Java 디자인 패턴의 Iterator 패턴 도입과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.