알고리즘 부분을 분리하여 다양한 알고리즘 방식으로 교체를 용이하게 하는 패턴
1. 코드
Strategy: 알고리즘 부분 클래스의 인터페이스 (1~3 중 하나 뽑는 알고리즘)
public interface Strategy {
public int getNext();
}
RandomStrategy: 알고리즘 클래스1 (랜덤 추출)
public class RandomStrategy implements Strategy {
@Override
public int getNext() {
Random random = new Random();
return random.nextInt(3);
}
}
SequentialStrategy: 알고리즘 클래스2 (순차적 추출)
public class SequentialStrategy implements Strategy {
private int value = 0;
@Override
public int getNext() {
return (value++) % 3;
}
}
ThreeCount: 알고리즘을 사용하는 class
public class ThreeCount {
private Strategy strategy;
public ThreeCount(Strategy strategy) {
this.strategy = strategy;
}
public void printNextNum() {
System.out.println(strategy.getNext());
}
}
Main : Test클래스
public class Main {
public static void main(String[] args) {
ThreeCount randomCount = new ThreeCount(new RandomStrategy());
for(int i=0; i<3; i++) {
randomCount.printNextNum();
}
ThreeCount sequentialCount = new ThreeCount(new SequentialStrategy());
for(int i=0; i<3; i++) {
sequentialCount.printNextNum();
}
}
}
2. 특징
- 알고리즘의 교체가 용이함
- 알고리즘에 해당하는 객체와 알고리즘을 사용하는 객체를 위임 방식으로 연결했음
- 새로운 알고리즘을 사용할 때 알고리즘을 사용하는 객체의 수정은 없어도 됨
3. 해당 패턴을 고려해볼만한 상황
- 다양한 알고리즘을 사용해야 하는 경우
- 계속해서 알고리즘의 개선이 예상되는 경우
- 복잡한 알고리즘을 사용해야 하는 경우
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Decorator 패턴 (0) | 2021.01.30 |
---|---|
Composite 패턴 (0) | 2021.01.24 |
Bridge 패턴 (0) | 2021.01.17 |
Abstract Factory 패턴 (0) | 2021.01.16 |
Builder 패턴 (0) | 2021.01.09 |