Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

[DesignPattern] Iterator pattern

Architecture/DesignPattern 2014.01.06 17:41
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


Iterator Pattern


 개요

 예제(Java)

 같이보기

 참고 사항


<< 개요 >>

Iterator Pattern -  하나씩 열거하면서 처리 한다.

 

 


<< 예제(Java) >>

1. 결과 

실용주의 프로그래머
애자일 프로젝트
파워 스피치
왜 일하는가?


2. 테스트 코드 

 package kr.pe.acet.iterator;

 

public class AggregateTest {
    @org.junit.Test
    public void testIterator() throws Exception {
        BookShelf bookShelf = new BookShelf(4);

        bookShelf.appendBook(new Book("실용주의 프로그래머"));
        bookShelf.appendBook(new Book("애자일 프로젝트"));
        bookShelf.appendBook(new Book("파워 스피치"));
        bookShelf.appendBook(new Book("왜 일하는가?"));

        Iterator it = bookShelf.iterator();

        while(it.hasNext()){
            Book book = (Book)it.next();

            System.out.println(book.getName());
        }
    }

}

 

3.Aggregate  

      package kr.pe.acet.iterator;

import java.util.Iterator;

public interface Aggregate {
    public abstract kr.pe.acet.iterator.Iterator iterator();
}

4. BookShelf 

 package kr.pe.acet.iterator;


public class BookShelf implements Aggregate {

    private Book[] books;

    private int last = 0;

    public BookShelf(int maxsize){
        this.books = new Book[maxsize];
    }

    public Book getBookAt(int index){
        return books[index];
    }

    public void appendBook(Book book){
        this.books[last] =  book;
        last++;
    }
    public int getLength(){
        return last;
    }
    @Override
    public Iterator iterator() {
        // TODO Auto-generated method stub
        return new BookShelfIterator(this);
    }
}

 

5. BookShelfIterator 

 package kr.pe.acet.iterator;

public class BookShelfIterator implements Iterator{
    private BookShelf bookShelf;

    private int index;

    public BookShelfIterator(BookShelf bookShelf){
        this.bookShelf = bookShelf;
        this.index = 0;
    }

    public boolean hasNext(){
        if(index < bookShelf.getLength()){
            return true;
        }else{
            return false;
        }
    }
    public Object next(){

        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}

 

6. Iterator 

package kr.pe.acet.iterator;

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

 

 

<< 같이 보기 >>

1. Visitor pattern

2. Composite pattern

3. Factory Method pattern


<< 참고 사항 >>

1.Java 언어로 배우는 디자인 패턴 입문



acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[DesignPattern] mediator pattern

Architecture/DesignPattern 2013.12.09 20:26
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

 

2013/12/03 - [Architecture/DesignPattern] - [DesignPattern] command pattern

 

2013/11/24 - [Architecture/DesignPattern] - [DesignPattern] observer pattern

 

2013/11/24 - [Architecture/DesignPattern] - [DesignPattern] Interpreter pattern

 

2013/07/21 - [Architecture/DesignPattern] - [첫번째 스터디] singleton 패턴

 

2013/07/21 - [Architecture/DesignPattern] - [첫번째 스터디] abstractFactory 패턴

 

 

<< Mediator Pattern >>

 

패턴의 의도 : 각 객체가 관련성을 갖는 다른 객체에 대한 참조관계를 직접 정의하기 보다는 이를 독립된 다른 객체가 관리..(-_-;;뭥미?)

즉, 중재한다고 보면 된다^-^

 

아래의 소스는 비행기를 예를 들었는데 너무 좋은 예인것 같다.

비행기들이 서로 충돌하지 않고 착륙 한다. 어떻게?? 관제탑이 비행기들을 중재하기 때문이다.

즉, 비행기끼리 서로 통신한다면 매우 혼란을 겪게 된다.


ex) 그림을 하나 보자

아래처럼 비행기들 끼리 서로 통신을 한다면 복잡스러울 것이다. 지금은 4대라서 6번이지만..ㅋㅋ



그래서 관제탑을 두어서 관리하면 아래와 같이 깔끔하다. 굳~!

 


Colleague : Mediator와 통신하는 객체들이라고 생각하시면 됩니다

            colleague

           미국식 [|kɑ:li:g] 발음듣기 영국식 [|kɒli:g] 발음듣기

            (같은 직장이나 직종에 종사하는) 동료

 

           핵심 문장!! : "Mediator 는 모든 것을 알고 있다+ㅁ+"

           즉,  tower.land(this);  <---Colleague에서 Mediator Pattern의 객체를 받아서 해당 method를 호출 한다.

           이미 Mediator는 task가 정해져있고 그 task를 실제로 하는 아이들이 Colleague 들이다.

     그런 의미에서 Mediator가 Colleague들을 중재한다고 볼 수 있다.


위를 이해했다면 Facade 패턴과 Mediator 패턴의 차이를 알 수가 있다.

Facade패턴은 창구라고 생각하면 되니 창구안의 객체들을 중재하는 기능은 없다.

하지만 Mediator는 이미 모든것을 정해놓고 Colleague, Mediator와 통신하는 객체들이기때문에 중재를 한다.

헷깔리지 말자~!^-^good~

 

아래의 소스에서 조금 아쉬운 것은 Colleague가 Interface 구조가 아니라는 것이다. Mediator가 하나 일 수 있지만 Colleague가 여러가지 일 경우가 많을 것이다. 물론 Mediator 또한 Interface로 갈 수 있다.(아래의 소스에 그렇게 해놨다..ㅋㅋㅋ 하지만 의미는 없다는거;;)

암튼 이해하기에는 좋은 소스임에는 틀림이 없다.


UML을 보자! - Class Diagram을 보자. 손수 그렸다..ㅋㅋ;;

또는 아래에는 표현이 되어있지는 않지만 Mediator를 Colleague에서 연관시켜서 

setMediator 로 받아서 또 다른 Mediator 사용도 가능하다.



main source

package kr.pe.acet.mediator;

public class MediatorMain {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  ControlTower tower = new ControlTower();
  
  Airplane[] airplanes = new Airplane[10]; // Colleague
  for (int i = 0; i < airplanes.length; i++) {
   airplanes[i] = new Airplane(tower, i);
  }
  for (Airplane airplane : airplanes) {
   airplane.start();
  }

 }

}
 

 

colleague source : Airplane

 package kr.pe.acet.mediator;

public class Airplane extends Thread {
    private final ControlTower tower;
    private final int seq;

    public Airplane(ControlTower tower, int seq) {
        this.tower = tower;
        this.seq = seq;
    }

    public int getSeq() {
        return seq;
    }

    @Override
    public void run() {
        try {
            while (!tower.getPermission()) {
                System.out.println(seq +"번 째 비행기 대기 중.");
                Thread.sleep(10L);
            }
            tower.land(this);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

mediator interface

 package kr.pe.acet.mediator;

public interface MediatorControlTower {
   public boolean getPermission();
   public void land(Airplane airplane) throws InterruptedException;
}

 

concreate Mediator

 package kr.pe.acet.mediator;

public class ControlTower implements MediatorControlTower{
    private volatile  boolean inUse;
   
    public synchronized boolean getPermission(){
        if (inUse) {
            return false;
        }else{
            inUse = true;
            return true;
        }
    }
   
    public void land(Airplane airplane) throws InterruptedException{
        int seq = airplane.getSeq();
        System.out.println(seq +"번 비행기 착륙 시작");
        Thread.sleep(50L);
        System.out.println(seq + "번 비행기 착륙 끝");
        inUse = false;
    }
}

 

 결과 - 쫌 길다..ㅋㅋㅋ 

1번 비행기 착륙 시작
3번 째 비행기 대기 중.
5번 째 비행기 대기 중.
0번 째 비행기 대기 중.
6번 째 비행기 대기 중.
2번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
9번 째 비행기 대기 중.
8번 째 비행기 대기 중.
3번 째 비행기 대기 중.
5번 째 비행기 대기 중.
9번 째 비행기 대기 중.
6번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
8번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
5번 째 비행기 대기 중.
3번 째 비행기 대기 중.
2번 째 비행기 대기 중.
4번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
9번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
5번 째 비행기 대기 중.
3번 째 비행기 대기 중.
7번 째 비행기 대기 중.
4번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
6번 째 비행기 대기 중.
8번 째 비행기 대기 중.
9번 째 비행기 대기 중.
5번 째 비행기 대기 중.
3번 째 비행기 대기 중.
9번 째 비행기 대기 중.
8번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
4번 째 비행기 대기 중.
1번 비행기 착륙 끝
3번 비행기 착륙 시작
5번 째 비행기 대기 중.
2번 째 비행기 대기 중.
6번 째 비행기 대기 중.
9번 째 비행기 대기 중.
8번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
4번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
4번 째 비행기 대기 중.
8번 째 비행기 대기 중.
9번 째 비행기 대기 중.
2번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
8번 째 비행기 대기 중.
9번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
9번 째 비행기 대기 중.
2번 째 비행기 대기 중.
6번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
9번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
4번 째 비행기 대기 중.
6번 째 비행기 대기 중.
8번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
3번 비행기 착륙 끝
9번 비행기 착륙 시작
6번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
8번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
0번 째 비행기 대기 중.
6번 째 비행기 대기 중.
7번 째 비행기 대기 중.
4번 째 비행기 대기 중.
8번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
8번 째 비행기 대기 중.
4번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
4번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
8번 째 비행기 대기 중.
7번 째 비행기 대기 중.
4번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
9번 비행기 착륙 끝
0번 째 비행기 대기 중.
8번 째 비행기 대기 중.
7번 째 비행기 대기 중.
6번 째 비행기 대기 중.
4번 비행기 착륙 시작
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
0번 째 비행기 대기 중.
6번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
8번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
7번 째 비행기 대기 중.
8번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
6번 째 비행기 대기 중.
4번 비행기 착륙 끝
8번 비행기 착륙 시작
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
6번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
5번 째 비행기 대기 중.
6번 째 비행기 대기 중.
2번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
8번 비행기 착륙 끝
6번 비행기 착륙 시작
2번 째 비행기 대기 중.
7번 째 비행기 대기 중.
5번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
5번 째 비행기 대기 중.
2번 째 비행기 대기 중.
7번 째 비행기 대기 중.
5번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
6번 비행기 착륙 끝
5번 비행기 착륙 시작
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
2번 째 비행기 대기 중.
0번 째 비행기 대기 중.
5번 비행기 착륙 끝
7번 째 비행기 대기 중.
2번 비행기 착륙 시작
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 째 비행기 대기 중.
2번 비행기 착륙 끝
0번 비행기 착륙 시작
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
7번 째 비행기 대기 중.
0번 비행기 착륙 끝
7번 비행기 착륙 시작
7번 비행기 착륙 끝

 



참고 사이트 : http://iilii.egloos.com/4850510 

                     http://www.youtube.com/watch?v=jWF6dvSr_Pk


- 끝 -


'Architecture > DesignPattern' 카테고리의 다른 글

[DesignPattern] state pattern  (0) 2013.12.31
[DesignPattern] memento pattern  (0) 2013.12.16
[DesignPattern] mediator pattern  (0) 2013.12.09
[DesignPattern] command pattern  (0) 2013.12.03
[DesignPattern] observer pattern  (0) 2013.11.24
[DesignPattern] Interpreter pattern  (0) 2013.11.24

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바