Latest web development tutorials

반복 모드

반복 모드 (반복자 패턴) 자바와 닷넷 프로그래밍 환경은 매우 일반적인 디자인 패턴이다. 이 모드 오브젝트의 컬렉션의 순차 액세스 요소를 사용하고, 객체의 컬렉션은 기본 표현을 알 필요가 없다.

반복자 패턴은 행동 패턴을 속한다.

소개

의도 : 중합 반응의 각 요소의 개체에 액세스하는 방법이지만 오브젝트의 내부를 노출 할 필요를 제공한다.

주로 해결하기 : 전체 통합 오브젝트를 통과 할 수있는 다른 방법을.

때 사용하기 : 고분자 개체를 통과.

해결 방법 : 대신 집계 객체의 반복자에 대한 책임의 요소 사이의 거리에 있습니다.

키 코드는 : 인터페이스를 정의 : 다음 hasNext을, 다음.

적용 예 : 반복자에 JAVA.

장점 : 1, 다른 방식을 지원하는 집계 개체를 통과합니다.이 중합 반복자 클래스를 단순화. 3, 동일한 중합 여러 순회를 가질 수있다. 도 4는 반복적 인 모드에서, 원래의 코드를 수정하지 않고, 폴리머 반복자 클래스 손쉽게 새로운 클래스를 추가한다.

단점 : 인해 업무 반복자 패턴 데이터 저장 및 이송 된 데이터의 분리, 새로운 집합 클래스가 어느정도는 시스템의 복잡성을 증가 새로운 반복자 클래스에 상응하는 증가, 클래스 쌍의 수가 증가를 필요로 추가한다.

사용 시나리오 : 1, 내부 표현을 노출하지 않고 고분자 콘텐츠 개체에 액세스 할 수 있습니다.2 필요 집합체 오브젝트 탐색 방법의 다양성을 제공한다. 다른 집계 구조를 통과하는 3는 통합 된 인터페이스를 제공합니다.

주 : 반복 모드 오브젝트의 컬렉션의 탐색 동작을 분리, 추상 반복자 클래스는 모두 수집의 내부 구조에 노출하지 않고 수행 될 수 있도록, 책임, 또한 내부 데이터 수집에 대한 외부 코드를 투명하게 액세스 할 수 있도록한다.

실현

우리는 이야기반복자 인터페이스를생성하고 탐색 방법은컨테이너 인터페이스의반복자를 돌려줍니다. Entity 클래스컨테이너인터페이스가반복자 인터페이스를구현하기위한 책임이 구현합니다.

IteratorPatternDemo, 우리의데모 클래스는이름모음으로 저장NamesRepositoryNamesRepository를 인쇄 할 엔티티 클래스를 사용합니다.

반복자 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

Iterator.java

공용 인터페이스의 반복자 {
   공공 부울 다음 hasNext ();
   공공 Object)을 (다음;
}

Container.java

공용 인터페이스 컨테이너 {
   공공 반복자에서는 getIterator ();
}

2 단계

만들기 엔티티 클래스컨테이너는인터페이스를 구현합니다. 이 클래스는 내부 클래스NameIterator반복자 인터페이스를 실현하고있다.

NameRepository.java

공용 클래스 NameRepository는 컨테이너 {구현
   공공 문자열 이름 [] = { "로버트", "존", "줄리", "로라"};

   @Override
   공공 반복자에서는 getIterator () {
      ) (새 NameIterator를 반환;
   }

   개인 클래스 NameIterator는 Iterator를 {구현

      INT 지수;

      @Override
      공공 부울 다음 hasNext () {
         경우 (인덱스 <names.length를) {
            true를 반환;
         }
         false를 반환;
      }

      @Override
      다음 공공 개체 () {
         경우 (this.hasNext ()) {
            이름을 반환 [인덱스 ++]
         }
         NULL을 반환;
      }		
   }
}

3 단계

반복자를 얻을 수NameRepository를 사용하여이름을 인쇄 할 수 있습니다.

IteratorPatternDemo.java

공용 클래스 IteratorPatternDemo {
	
   공공 정적 무효 메인 (문자열 []에 args) {
      NameRepository namesRepository = 새로운 NameRepository ();

      대한 (반복자 ITER = namesRepository.getIterator (); iter.hasNext ()) {
         문자열 이름 = (문자열) iter.next ();
         에서 System.out.println ( "이름"+ 이름);
      } 	
   }
}

4 단계

출력을 확인합니다.

이름 : 로버트
이름 : 존
이름 : 줄리
이름 : 로라