728x90
반응형
01.코드 개선하기
01.1 RecentPostIterator
package me.whiteship.designpatterns._03_behavioral_patterns._16_iterator._02_after;
import me.whiteship.designpatterns._03_behavioral_patterns._16_iterator._01_before.Post;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class RecentPostIterator implements Iterator<Post> {
private Iterator<Post> internalIterator;
public RecentPostIterator(List<Post> posts) {
Collections.sort(posts, (p1, p2) -> p2.getCreatedDateTime().compareTo(p1.getCreatedDateTime()));
this.internalIterator = posts.iterator();
}
@Override
public boolean hasNext() {
return this.internalIterator.hasNext();
}
@Override
public Post next() {
return this.internalIterator.next();
}
}
- concreate aggregate를 알고 있는 경우
01.2 Client
- before
-
import java.util.Collections; import java.util.Iterator; import java.util.List; public class Client { public static void main(String[] args) { Board board = new Board(); board.addPost("디자인 패턴 게임"); board.addPost("선생님, 저랑 디자인 패턴 하나 학습하시겠습니까?"); board.addPost("지금 이 자리에 계신 여러분들은 모두 디자인 패턴을 학습하고 계신 분들입니다."); // TODO 들어간 순서대로 순회하기 List<Post> posts = board.getPosts(); for (int i = 0 ; i < posts.size() ; i++) { Post post = posts.get(i); System.out.println(post.getTitle()); } // TODO 가장 최신 글 먼저 순회하기 Collections.sort(posts, (p1, p2) -> p2.getCreatedDateTime().compareTo(p1.getCreatedDateTime())); for (int i = 0 ; i < posts.size() ; i++) { Post post = posts.get(i); System.out.println(post.getTitle()); } } }
- after
-
import java.util.Iterator; import java.util.List; public class Client { public static void main(String[] args) { Board board = new Board(); board.addPost("디자인 패턴 게임"); board.addPost("선생님, 저랑 디자인 패턴 하나 학습하시겠습니까?"); board.addPost("지금 이 자리에 계신 여러분들은 모두 디자인 패턴을 학습하고 계신 분들입니다."); // TODO 들어간 순서대로 순회하기 List<Post> posts = board.getPosts(); Iterator<Post> iterator = posts.iterator(); System.out.println(iterator.getClass()); for (int i = 0 ; i < posts.size() ; i++) { Post post = posts.get(i); System.out.println(post.getTitle()); } // TODO 가장 최신 글 먼저 순회하기 Iterator<Post> recentPostIterator = board.getRecentPostIterator(); while(recentPostIterator.hasNext()) { System.out.println(recentPostIterator.next().getTitle()); } } }
01.3 Board
- before
-
import java.util.ArrayList; import java.util.List; import java.util.Set; public class Board { List<Post> posts = new ArrayList<>(); public List<Post> getPosts() { return posts; } public void setPosts(List<Post> posts) { this.posts = posts; } public void addPost(String content) { this.posts.add(new Post(content)); } }
- after
-
import java.util.ArrayList; import java.util.Iterator; import java.util.List; 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); } }
728x90
반응형
'CS Study > 디자인패턴' 카테고리의 다른 글
2022-07-10-메멘토패턴-1부-패턴소개 (0) | 2022.07.18 |
---|---|
2022-07-07-이터레이터패턴-3부-장점과단점 (0) | 2022.07.18 |
2022-07-07-이터레이터패턴-1부-패턴소개 (0) | 2022.07.18 |
2022-05-12-인터프리터패턴-3부-장점과단점 (0) | 2022.05.13 |
2022-05-12-인터프리터패턴-2부-패턴적용하기 (0) | 2022.05.13 |
댓글