2022-07-07-이터레이터패턴-2부-패턴적용하기
본문 바로가기
CS Study/디자인패턴

2022-07-07-이터레이터패턴-2부-패턴적용하기

by KyeongMin 2022. 7. 18.
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
반응형

댓글