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

[DesignPattern] Decorator Pattern

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

Decorator Pattern


 개요

 클래스 다이어그램

 예제(Java)

 같이보기

 참고 사항


<< 개요 >>

Decorator Pattern 이란?

 

데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.

(출처 : 위키피디아 - http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0_%ED%8C%A8%ED%84%B4)

 

의도

객체에 동적으로 새로운 서비스를 추가

기능 추가를 위해 서브클래스를 생성 하는 것 보다 융통성이 있음.

 

 

아래의 로봇 사진 출처 : http://blog.naver.com/PostView.nhn?blogId=romantico_q&logNo=50185115988

 

변신 합체 로봇!! 페가서스 라고 하네요^^;;

데코레이터 패턴을 학습 하면서 기억에 많이 남을만한 예제가 없을까? 라고 생각하던 차에..변신합체 로봇을 통해 학습하면 좋겠다고 생각하게 되었습니다..ㅋㅋㅋㅋ;;

 

우리의 변신합체 로봇들을 소개 합니다.

우리의 메인 로봇인 왼쪽 - 파랭이 로봇!!

그 외 몸통이 될 가운데 로봇, 다리가 되어줄 빨갱이 로봇ㅋㅋ

 

하일라이트로 다시 한번 변신을 시켜줄 우리의 독수리 로봇이 되겠습니다.

 

 

 

1) 머리(우리의 메인)

 

2) 몸통(합체 되어질)

 

3) 다리(합체 되어질)

 

 

쫘잔~~~+ㅁ+/

 

 

 

아래처럼 합체로봇으로 변신하게 됩니다.

 

 

여기서 다가 아닙니다!! 변신합체 로봇에서 다시 한번 독수리가 합체가 되어서

그 유명한!! 페가서스가 되어집니다!!!! 쫘잔~~~~~~+ㅁ+/

 

변신합체 로봇! 페가서스!!!! 두둥~

자! 데코레이터 패른!!! 시작 해볼까용?~~

개요는 마무리 하고, 먼저 패턴의 클래스 다이어그램을 먼저 살펴 보겠습니다.

 

<< 클래스 다이어그램 >> 

그냥 한번 그려보았다..;;

 

아래와 비교해보면 인터페이스와 추상클래스간의 관계를 그리지 않은 것 같다. 참고하자!

 

<< 예제(Java) >>

1) 결과

   아래의 결과와 같이 변신은 메인 로봇이 머리로! 그 다음엔 바디, 그 다음 다리, 그 다음 뒷다리로 변신이

   되어집니다. ㅋㅋㅋ 전투력은 무려 10만이 넘어가네요+ㅁ+/

Change Center Robot -> Body Combine!!
Change Red Robot -> Combine Leg!!!
Change egle Robot -> Back Leg Combine!!
Main Robot Combine!! to Head, Combine Body!!, Combine Leg!!, Combine Back Leg!!
total power is..103100

 

 

    2) 테스트 코드   

package kr.pe.acet.decorator;

import org.junit.Assert;
import org.junit.Test;

public class DecoratorPatternTest {

 @Test
 public void test() {
  
  Robot mRobot = new BacklegCombine(new LegCombine(new BodyCombine(new  MainRobot())));
  
  Assert.assertNotNull(mRobot);
  
  System.out.println(mRobot.getCombineAction());
  System.out.println("total power is.."+mRobot.getPower());
  
 }

}

 

 

    3) Robot Interface(Decorator pattern에서 중요하게 봐야 할 부분 입니다.)

package kr.pe.acet.decorator;

public interface Robot {
 public String getCombineAction();
 public int getPower();
}
 

 

 

 

    4) MainRobot class

package kr.pe.acet.decorator;

public class MainRobot implements Robot{

 @Override
 public String getCombineAction() {
  // TODO Auto-generated method stub
  return "Main Robot Combine!! to Head";
 }

 @Override
 public int getPower() {
  // TODO Auto-generated method stub
  return 100;
 }
}
 

 

 

    5) CombineDecorator class (Decorator pattern에서 중요하게 봐야 할 부분 입니다.)

package kr.pe.acet.decorator;

public abstract class CombineDecorator implements Robot{
 protected Robot tempRobot;
 
 public CombineDecorator(Robot newRobot){
  tempRobot = newRobot;
 }
 
 public String getCombineAction() {
  // TODO Auto-generated method stub
  return tempRobot.getCombineAction();
 }

 public int getPower() {
  // TODO Auto-generated method stub
  return tempRobot.getPower();
 }
  
}
 

 

 

    6) BodyCombine class

package kr.pe.acet.decorator;

public class BodyCombine extends CombineDecorator{

 public BodyCombine(Robot newRobot) {
  super(newRobot);
  System.out.println("Change Center Robot -> Body Combine!!");
 }

 public String getCombineAction() {
  // TODO Auto-generated method stub
  return tempRobot.getCombineAction()+", Combine Body!!";
 }

 public int getPower() {
  // TODO Auto-generated method stub
  return tempRobot.getPower()+2000;
 }

}
 

 

 

    7) LegCombine class

package kr.pe.acet.decorator;

public class LegCombine extends CombineDecorator{

 public LegCombine(Robot newRobot) {
  super(newRobot);
  System.out.println("Change Red Robot -> Combine Leg!!!");
 }
 
 public String getCombineAction() {
  // TODO Auto-generated method stub
  return tempRobot.getCombineAction()+", Combine Leg!!";
 }

 public int getPower() {
  // TODO Auto-generated method stub
  return tempRobot.getPower()+1000;
 }

}
 

 

 

 8) BacklegCombine class

package kr.pe.acet.decorator;

public class BacklegCombine extends CombineDecorator{

 public BacklegCombine(Robot newRobot) {
  super(newRobot);
  System.out.println("Change egle Robot -> Back Leg Combine!!");
 }

 public String getCombineAction() {
  // TODO Auto-generated method stub
  return tempRobot.getCombineAction()+", Combine Back Leg!!";
 }

 public int getPower() {
  // TODO Auto-generated method stub
  return tempRobot.getPower()+100000;
 }

}
 

 

 

 

<< 같이 보기 >>

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

정말 도움이 많이 된 동영상 입니다. 참고하세요~꼭 보세요~!!

내 책에 있던 소스 코드

 

또 다른 소스 참고! : https://github.com/colorbox/Gof/tree/master/java/Decorator

 

<< 참고 사항 >>

데코레이터 패턴은 객체에 동적으로 새로운 무엇인가를 하고자 할 때 사용 된다. 특히 상속으로 sub Class를 이용하는 것 보다 더 유연성 있게 추가 할 수 있다.

 

 

 

저작자 표시 비영리 변경 금지
신고

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

설정

트랙백

댓글

  • Favicon of http://7network.tistory.com BlogIcon 개굴개굴왕 2014.08.05 14:09 신고 답글 | 수정/삭제 | ADDR

    안녕하세요. 블로그 내용이 좋아서♡ 블로그모음 서비스인 블로그앤미[http://blogand.me] 에 등록했습니다. 원하지 않으시면 삭제하겠습니다. 좋은 하루 되세요. ^^

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2014.08.05 17:08 신고 수정/삭제

      ㅎㅎㅎ블로그모음 서비스도 있었군요! 등록해주셔서 감사합니다^^
      그리고 번창하시길 바랍니다~

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

[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을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[DesignPattern] Interpreter pattern

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

 

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

 

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

지금까지 공부 한 디자인 패턴 목록

  : http://acet.pe.kr/notice/325

 

음..정리는 2개뿐이 하질 않았군요.. 하하;;

 

프로젝트와 병행을 하고 있어서..11월 19일부터 내부 스터디 다시 시작 합니다^-^/

 

매주 월요일 - 눈이 오나 비가오나 지구가 망해도 스터디는 진행 합니다. 아무도 참여하지 않아도 진도는 나갑니다.ㅋㅋㅋㅋ

 

<< 2013년 11월 19일 >>

범 위  : Interperter 패턴

참여 인원 : 4명 중 3명 참여

  참 여 : 공K, 박D, Mr. 권

  불 참 : 이D(교육 참여)

 

참고 사이트 : http://ko.wikipedia.org/wiki/%EC%98%B5%EC%84%9C%EB%B2%84_%ED%8C%A8%ED%84%B4

 

인터프리터 패턴 이란??

In computer programming, the interpreter pattern is a design pattern that specifies how to evaluate sentences in a language.

위의 빨간 문장이 어떻게 보면 핵심인 것 같다. 영어라서 그런지..해석해보면 Interpreter가 뭔지 잘 모르면

난감 할 수 있는 문장이다.

evaluate를 네이버에서 찾아보면 아래와 같다 ㅋㅋ

더보기

 

 암튼 해석을 해보면 어떤 특별한(상징적인) 문장을 평가(해석)한다는 뜻이다.

 

The basic idea is to have a class for each symbol (terminal or nonterminal) in a specialized computer language. The syntax tree of a sentence in the language is an instance of the composite pattern and is used to evaluate (interpret) the sentence

 

syntax tree 라는 것은 예를 들어서 a b + c a - -  이런 상징적인 녀석들이 모여서 차례차례 수행이 되는데

      syntax tree라는 용어를 사용 한다. 소스에서 syntax tree라는 변수가 있으니 그 용도를 보면 알 것 이다.

구조를 살펴보도록 하자! 

 

 

 

소스 -  패키지는 package kr.pe.acet.interpreter; 이다.

 

InterpreterPatternTest.java

 

Evaluator.java

 

Expression.java

 

Minus.java

 

Number.java

 

Plus.java

 

Variable.java

 

저작자 표시 비영리 변경 금지
신고

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

설정

트랙백

댓글

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

티스토리 툴바