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
반응형
'Design pattern > GoF(인강편)' 카테고리의 다른 글
[Design Pattern] Prototype Pattern (0) | 2021.11.24 |
---|---|
[Design Pattern] Singleton Pattern (0) | 2021.11.24 |
[Design Pattern] Factory Method Pattern (0) | 2021.11.24 |
[Design Pattern] Template Method Pattern (0) | 2021.11.10 |
[Design Pattern] Adapter Pattern (0) | 2021.10.28 |
댓글