Search results for 'Strategy'

행위(Behavioral) 패턴 - Strategy

2007/05/04 22:44
다양한 알고리즘이 존재하면 이들 각각을 하나의 클래스로 캡슐화하여 알고리즘의 대체가 가능하도록 함. Strategy 패턴을 이용하면 클라이언트와 독립적인 다양한 알고리즘으로 변형할 수 있음. 알고리즘을 바꾸더라도 클라이언트는 아무런 변경이 필요 없음.

1. 동기
특별한 서비스나 기능을 요구하는 프로그램과 기능을 수행하는 여러 가지 방법을 가지고 있는 것은 Strategy 패턴의 후보. 프로그램들은 컴퓨터 효율이나 사용자 선택을 기준으로 알고리즘을 선택.
 우리가 여러 가지 다른 방법으로 같은 일을 하려고 하는 프로그램에서 다수의 경우가 존재.
  • 다른 포멧으로 파일들을 저장.
  • 다른 알고리즘을 사용하여 파일들을 압축
  • 다른 압축 구조를 이용하여 비디오 데이터를 캡쳐.
  • 텍스트 데이터를 나타내기 위한 다른 line-breaking 전략을 이용.
  • 같은 데이터를 다른 포멧으로 그린다 : 선 그래프, 막대 그래프 나 파이 차트

2. 고려해야 할 사항

  • 클래스들은 종종 여러개의 알고리즘 선택이 필요
  • 알고리즘이 어떤 방법으로 구현되어 있는 지와 같은 구체적인 정보가 클라이언트 클래스에 노출되지 말아햐 함
  • 많은 조건문을 이용해 구현되어 있는 알고리즘은 관리가 어려움

3. 구조

사용자 삽입 이미지


SortUseCase.java (Language : java)
  1. public class SortUseCase {
  2.  public static void main(String[] args) {
  3.   strategySort sSort = new strategySort();
  4.   QuickSortAlgorithm qSort = new QuickSortAlgorithm();
  5.   sSort.SetAlgorithm(qSort);
  6.   sSort.Sort();
  7.  }
  8. }

strategySort.java (Language : java)
  1. public class strategySort {
  2.  
  3.  strategySort(){}
  4.  
  5.  void Sort(){
  6.   mSort.Sort();
  7.  }
  8.  void SetAlgorithm( SortAlgorithm sort ){
  9.   mSort = sort;
  10.  }
  11.  
  12.  SortAlgorithm mSort;
  13.  private SortAlgorithm sortAlgorithm = null;
  14.  public SortAlgorithm getSortAlgorithm() {
  15.   return sortAlgorithm;
  16.  }
  17.  public void setSortAlgorithm(SortAlgorithm sortAlgorithm) {
  18.   this.sortAlgorithm = sortAlgorithm;
  19.  }
  20. }

SortAlgorithm.java (Language : java)
  1. public interface SortAlgorithm {
  2.  void Sort();
  3.  public strategySort strategySort = null;
  4. }

BinarySortAlgorithm.java (Language : java)
  1. public class BinarySortAlgorithm implements SortAlgorithm {
  2.  public void Sort(){
  3.   System.out.println("Binary Sort");
  4.  }
  5. }


BubbleSortAlgorithm.java (Language : java)
  1. public class BubbleSortAlgorithm implements SortAlgorithm{
  2.  public void Sort(){
  3.   System.out.println("Bubble Sort");
  4.  }
  5. }


QuickSortAlgorithm.java (Language : java)
  1. public class QuickSortAlgorithm implements SortAlgorithm {
  2.  
  3.  public void Sort(){
  4.   System.out.println("Quick Sort");
  5.  }
  6. }

4. 자바 프로그래밍 언어에서의 사용 예

사용자 삽입 이미지

  • J2SE™ 플랫폼의 java.awt 패키지에서 사용
    AWT의 GUI 컨테이너는 grid, border, flow 등과 같은 레이아웃으로 구성되어 있으며, AWT는 모든 GUI 컨테어너에 할당되어 있는 레이아웃 메니져를 통해 이 메커니즘을 제공
  • 컨테이너는 콤포넌트를 배치하는 작업을 레이아웃 매니져에게 위임하고 있음.

5. 결과

  • 장점
    조건절을 사용하지 않고 여래개의 알고리즘 구현이 가능
    위임(Delegatetion)이라는 느슨한 연결을 사용하고 있기 때문에 기존 알고리즘을 변경 및 새로운 알고리즘 추가가 용이
  • 단점
    클라이언트는 전략 선택을 위해 어떤 전략들이 존재하는지 알고 있어야 함
    오브젝트와 메소트 호출 증가로 오버헤드가 조금 증가할 수 있음.
    오브젝트 수가 증가
이올린에 북마크하기

happyness Programming/J2EE Patterns , ,

2007/05/04 22:44 2007/05/04 22:44
[로그인][오픈아이디란?]