반복자 패턴


반복자 패턴은 Java 및 .Net 프로그래밍 환경에서 매우 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 컬렉션 개체의 기본 표현을 알지 못한 채 컬렉션 개체의 요소에 순차적으로 액세스하는 데 사용됩니다.

반복자 패턴은 행동 패턴입니다.

Introduction

의도: 객체의 내부 표현을 노출하지 않고 집계 객체의 개별 요소에 순차적으로 액세스하는 방법을 제공합니다.

주요 솔루션: 전체 통합 개체를 탐색하는 다양한 방법.

사용 시기: 집계 객체를 탐색합니다.

해결 방법: 요소 간 이동 책임을 집계 개체 대신 반복자에게 맡기세요.

키 코드: 정의 인터페이스: hasNext, next.

응용 사례: Java의 반복자.

장점: 1. 다양한 방식으로 집계 객체 탐색을 지원합니다. 2. 반복자는 집계 클래스를 단순화합니다. 3. 동일한 집계에 여러 순회가 있을 수 있습니다. 4. 반복자 모드에서는 원본 코드를 수정하지 않고 새로운 집계 클래스와 반복자 클래스를 추가하는 것이 매우 편리합니다.

단점: 반복자 패턴은 데이터 저장과 데이터 탐색의 책임을 분리하므로 새 집계 클래스를 추가하려면 새 반복자 클래스를 추가해야 하며 이로 인해 시스템 복잡성이 어느 정도 증가합니다. 복잡성.

사용 시나리오: 1. 내부 표현을 노출하지 않고 집계 개체의 콘텐츠에 액세스합니다. 2. 집합 객체에 대해 다양한 순회 방법을 제공해야 합니다. 3. 다양한 집계 구조를 탐색하기 위한 통합 인터페이스를 제공합니다.

참고: 반복자 패턴은 컬렉션 개체의 순회 동작을 분리하고 담당할 반복자 클래스를 추상화합니다. 이렇게 하면 컬렉션의 내부 구조가 노출되지 않으며 외부 코드가 컬렉션의 내부에 투명하게 액세스할 수 있습니다. 데이터.

Implementation

탐색 방법을 설명하는 Iterator 인터페이스와 반복자를 반환하는 Container 인터페이스를 만듭니다. Container 인터페이스를 구현하는 엔터티 클래스는 Iterator 인터페이스 구현을 담당합니다.

IteratorPatternDemo, 데모 클래스는 엔터티 클래스 NamesRepository를 사용하여 NamesRepository에 컬렉션으로 저장된 Names을 인쇄합니다.

iterator_pattern_uml_diagram.jpg

1단계

인터페이스를 만듭니다.

Iterator.java

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

Container.java

public interface Container {
   public Iterator getIterator();
}

2단계

Container 인터페이스를 구현하는 엔터티 클래스를 만듭니다. 이 클래스에는 Iterator 인터페이스를 구현하는 내부 클래스 NameIterator가 있습니다.

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단계

출력을 확인합니다.

rreee