Startegy Pattern 전략 패턴
행동 패턴으로, 런타임에 객체의 행동이나 알고리즘을 결정할 수 있는 패턴입니다.
다양한 전략을 나타내는 객체와 전략 객체에 따라 행동이 다른 컨텍스트 객체를 생성합니다.
Startegy Pattern 전략 패턴이 적합한 경우
- 런타임에 객체의 기능이나 알고리즘을 변경하고 싶은 경우
- 몇개의 행동(메소드)만 다른, 비슷한 객체가 많은 경우
- 비즈니스 로직에서 분리하고 싶은 경우
- 클래스에 알고리즘이나 기능을 변환하기 위한 대량의 조건 연산이 있는 경우
장단점
장점
- 런타임에 객체 내부의 알고리즘을 바꿀 수 있습니다.
- 알고리즘을 사용하는 코드에서 알고리즘을 구현하는 세부 기능을 분리할 수 있습니다.
- 합성(Composition)으로 상속(inheritance)을 대체할 수 있습니다.
- 기존의 컨텍스트 객체를 수정하지 않고, 새로운 전략을 추가할 수 있습니다. (단일책임원칙)
단점
- 알고리즘의 변경이 빈번하지 않다면, 패턴을 적용하는 것이 코드를 더 복잡하게 만들 수 있습니다.
- 고객이 전략과 적절한 전략을 선택하는 것의 차이를 알아야만 합니다.
- 많은 프로그래밍 언어들이 익명 함수 내부에 다른 버전의 다양한 버전의 알고리즘을 구현할 수 있도록 지원합니다. 전략 패턴을 쓰지 않고도 프로그래밍 언어 자체의 기능을 사용할 수 있습니다.
*상속과 합성
2021.12.10 - [JAVA/JAVA] - 상속과 합성 Inheritance And Composition
Startegy Pattern 전략 패턴의 구현
전략 객체를 포함하는 컨텍스트 객체를 생성합니다. 그리고 컨텍스트 객체 내부의 전략 객체는 외부에서 주입받도록 합니다.
Strategy
public interface Strategy {
public int execute(int a, int b);
}
MultiplyStrategy
public class MultiplyStrategy implements Strategy{
@Override
public int execute(int a, int b) {
return a*b;
}
}
AddStrategy
public class AddStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a+b;
}
}
SubtractStrategy
public class SubtractStrategy implements Strategy{
@Override
public int execute(int a, int b) {
return a-b;
}
}
Context
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int execute(int a, int b){
return strategy.execute(a,b);
}
}
참조
'JAVA > DesignPattern' 카테고리의 다른 글
Design Pattern 디자인 패턴 Visitor Pattern 방문자 패턴 (0) | 2022.01.03 |
---|---|
Design Pattern 디자인 패턴 Template Pattern 템플릿 패턴 (0) | 2021.12.31 |
Design Pattern 디자인 패턴 State Pattern 상태 패턴 (0) | 2021.12.29 |
Design Pattern 디자인 패턴 Observer Pattern 옵저버 패턴 (0) | 2021.12.28 |
Design Pattern 디자인 패턴 Memento Pattern 메멘토 패턴 (0) | 2021.12.27 |