動作モードどうさもーど:アプレットモードアプレットモードアプレットもーど


紹介する


これは、集合オブジェクトの内部構造を露出させない巡回方法を提供するモードである.
→コレクション内のオブジェクトのクライアントコードを変更せずに複数の巡回方法を提供できる.

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)実施奇形機のクラスを定義する

    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());
            }
        }
    }