Free Lines Arrow
본문 바로가기
Design pattern/GoF(인강편)

[Design Pattern] Strategy Pattern

by skahn1215 2021. 10. 28.
728x90
반응형

Strategy Pattern 이란?

  • 실행 중에 알고리즘을 선택할수 있게 해주는 패턴이다.
  • 유연하고 재사용 가능한 객체 지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법이다.
  • 다형성을 잘 이해해야 된다.
  • 각 알고리즘을 캡슐화 한다.
     - 알고리즘들은 해당 계열 안에서 상호 교체가 가능하게 만든다.

 

 

Strategy Pattern 장점

  • 여러개의 재사용이 가능하다. 
     - 인터페이스와 구현체를 나누면 동일한 기능을 상황에 맞게 구현할수 있다.
  • 기존코드를 변경할 필요 없이 새로운 전략을 만들수 있다.

 

 

Strategy Pattern 구조

  • Strategy 를 Interface 로 만든다.
  • 구현체 class 를 원하는 만큼 구현한다.
  • Context 에서 사용할때는 alogorithm 만 호출하면 된다.

 

 

Strategy Pattern 예제

  • 아래와 같이 악기 를 인터페이스로 하고
  • 드럼과 기타를 구현을 하였다.
  • 그리고 사용자는 play 만 호출하면된다.

 

 

구현

Instrument Interface

package patterns.strategy;

public interface Instrument {
    public void play();
}

 

Drum class

package patterns.strategy;

public class Drum implements Instrument{
    @Override
    public void play() {
        System.out.println("play drum");
    }
}

 

Bass Guitar class

package patterns.strategy;

public class BassGuitar implements Instrument{
    @Override
    public void play() {
        System.out.println("play bass guitar");
    }
}

 

User class

package patterns.strategy;

public class User {
    private Instrument instrument;
    public void play(){
        if (instrument == null) {
            System.out.println("연주할수 있는 악기가 없습니다.");
        } else {
            instrument.play();
        }
    }

    public void setInstrument(Instrument instrument) {
        this.instrument = instrument;
    }
}

 

Test

package patterns.strategy;

public class Test {

    public static void main(String[] args) {
        User user = new User();

        user.play();
        
        Drum drum = new Drum();
        BassGuitar bassGuitar = new BassGuitar();

        user.setInstrument(drum);
        user.play();

        user.setInstrument(bassGuitar);
        user.play();
    }
}

 

결과

연주할수 있는 악기가 없습니다.
play drum
play bass guitar

 

728x90
반응형

댓글