디자인 패턴 14의 반복기 패턴

배경

먼저 코드를 살펴 보겠습니다.

List<Member> memberList = listMember();
Iterator<Member> iterator = memberList.iterator();
while (iterator.hasNext()) {
    Member next = iterator.next();
    ...
}

위의 코드는 반복자를 사용하여 List를 탐색합니다. 다음 순회 방법을 살펴 보겠습니다.

for (Member member : memberList) {
    ...
}

위의 순회는 직접 순회입니다.

직접 순회는 컬렉션이 직접 참여하는 순회 프로세스입니다. 여기에서 순회 방법은 컬렉션 개체와 너무 결합되어 있습니다. 직접 순회에서 컬렉션을 조작하면 작업 예외가 발생합니다.

iterator traversal을 사용하여 collection 객체와 traversal 동작을 분리합니다. 클라이언트가 collection을 탐색 할 때 iterator를 통해 작동합니다. 클라이언트의 경우 컬렉션의 내부 세부 정보가 숨겨집니다. 반복자 순회를 사용하면 컬렉션을 순회하는 동안 컬렉션을 운영하는 데 문제가 없습니다.

실제로 반복기 순회는 반복기 패턴을 사용합니다.

반복기 패턴이란?

기본 표현을 노출하지 않고 집계 객체의 요소에 순차적으로 액세스하는 방법을 제공합니다 (객체의 내부 세부 정보를 노출하지 않고 컨테이너 객체의 요소에 액세스하는 방법을 제공합니다).

반복기 모드는 주로 다음 4 가지 요소로 구성됩니다.

  • 추상 집계 (집계) 역할 : 집계 개체를 저장, 추가 및 삭제하고 반복기 개체를 만들기위한 인터페이스를 정의합니다.

  • 구체적인 집계 (ConcreteAggregate) 역할 : 추상 집계 클래스를 구현하고 구체적인 반복기의 인스턴스를 반환합니다.

  • 추상 반복자 역할 : 일반적으로 hasNext (), first (), next () 등과 같은 메소드를 포함하여 집계 요소에 액세스하고 탐색하기위한 인터페이스를 정의합니다.

  • 구체적인 반복기 (Concretelterator) 역할 : 추상 반복기 인터페이스에 정의 된 메서드를 구현하고 집계 개체의 순회를 완료하고 순회의 현재 위치를 기록합니다.

반복자 모드의 구조 다이어그램은 다음과 같습니다.

암호

골재

public interface Aggregate {
    void add(Object obj);
    void remove(Object obj);
    Iterator getIterator();
}

반복자

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

ConcreteAggregate

ConcreteIterator

테스트 코드 :

시험 결과:

聚合的内容有:微信号:Lvshen_9 头条号:Lvshen的技术小屋 CSDN:Lvshen的技术小屋 
First:微信号:Lvshen_9

반복자 패턴에 대한 생각

Java에서 컬렉션은 반복자 클래스를 제공합니다. 컬렉션과 같은 집계 클래스를 직접 작성하려면 iterator 클래스를 사용할 수 있습니다. 반복기 패턴을 사용하면 내부 세부 정보를 노출하지 않고 집계 된 개체에 액세스 할 수 있으므로 집계 된 개체의 데이터 보안이 보호됩니다.

사실 Java 개발에서는 반복자 모드를 사용하지 못할 수 있습니다. Java 클래스 라이브러리에서는 반복자 모드를 사용해야하는 모든 라이브러리가 이미 반복자 클래스를 제공하기 때문입니다.

과거에 추천

QR 코드를 스캔하여 더 흥미 진진하게 만드세요. 또는 WeChat 에서 Lvshen_9를 검색 하여 답장하여 백그라운드에서 정보를 얻을 수 있습니다.

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

기타 : 더 많은 놀라움을 얻으 려면 [ 내 혜택 ]을 클릭하십시오 .

 

추천

출처blog.csdn.net/wujialv/article/details/109441778