행동 패턴: 이터레이터 패턴
소개
집합 객체 내부 구조를 노출시키지 않고 순회하는 방법을 제공하는 패턴이다.
→ 집합 내부 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있다.
1) 장점
- 집합 객체가 가지고 있는 객체에 손쉽게 접근할 수 있다.
- 일관된 인터페이스를 사용해 여러 형태의 집합 구조를 순회할 수 있다.
2) 단점
- 클래스가 늘어나고 복잡도가 증가한다.
구조
구현
1) 대상 클래스 정의
public class Board {
List<Post> posts = new ArrayList();
public List<Post> getPosts() {
return posts;
}
public void addPost(String content) {
this.posts.add(new Post(content));
}
public Iterator<Post> getRecentPostIterator() {
return new RecentPostIterator(this.posts);
}
}
2) Iterator를 구현하는 클래스 정의
public class RecentPostIterator implements Iterator<Post> {
private Iterator<Post> internalInterator;
public RecentPostIterator(List<Post> posts) {
Collections.sort(
posts,
(p1, p2) -> p2.getCreatedDate().compareTo(p1.getCreatedDateTime()));
this.internalIterator = posts.iterator();
}
}
사용
public class Client {
public static void main(String[] args) {
Board board = new Board();
board.addPost("디자인 패턴");
board.addPost("지금은 이터레이터 패턴을 학습중입니다.");
board.addPost("지금 이 글을 보고 계시면 이터레이터 패턴을 학습하고 계십니다.");
//들어간 순서대로 순회하기
List<Post> posts = board.getPosts();
Iterator<Post> iterator = posts.iterator();
for(int i = 0; i < posts.size(); i++) {
Post post = posts.get(i);
System.out.println(post.getTitle());
}
//가장 최신 글 먼저 순회하기
Iterator<Post> recentPostIterator = board.getRecentPostIterator();
while(recentPostIterator.hasNext()) {
System.out.println(recentPostIterator.next().getTitle());
}
}
}
Author And Source
이 문제에 관하여(행동 패턴: 이터레이터 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zenon8485/행동-패턴-이터레이터-패턴저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)