정의
같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴

예시)
게임 캐릭터가 착용한 무기에 따라 공격의 행위가 달라진다. 칼, 활, 창, 맨손 등 공격을 하는 행위는 동일하나 필요에 따라 무기를 바꾸어 공격할 수 있다.
- Strategy: 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시 => 장착무기
- ConcreateStrategy1, 2, 3: 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스 => 칼, 활, 창, 맨손
- Context: 스트래티지 패턴을 이용하는 역할 수행. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메서드 제공 => 캐릭터
1
2
3
4
|
// Strategy
public interface AttackStrategy {
public abstract void attack();
}
|
cs |
1
2
3
4
5
6
7
|
public class SwordStrategy implements AttackStrategy {
@Override
public void attack() {
System.out.println("검 공격!!");
}
}
|
cs |
1
2
3
4
5
6
|
public class BowStrategy implements AttackStrategy {
@Override
public void attack() {
System.out.println("활 공격!!");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Character {
private AttackStrategy attackStrategy;
public void setAttackStrategy(AttackStrategy attackStrategy) {
this.attackStrategy = attackStrategy;
}
public void attack() {
attackStrategy.attack();
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Main {
public static void main(String[] args) {
Character user = new Character();
user.setAttackStrategy(new SwordStrategy());
user.attack();
user.setAttackStrategy(new BowStrategy());
user.attack();
}
}
|
cs |

참조
[디자인 패턴] 전략 패턴(Strategy Pattern)
[디자인 패턴] 전략 패턴(Strategy Pattern)
velog.io
디자인 패턴 : 전략패턴이란?
디자인 패턴에서 전략패턴이란 무엇인가?
velog.io
https://victorydntmd.tistory.com/292
[디자인패턴] 전략 패턴 ( Strategy Pattern )
전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우
victorydntmd.tistory.com
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] 옵져버 패턴(Observer Pattern) (0) | 2021.07.20 |
---|---|
[디자인패턴] 어댑터 패턴(Adaptor Parttern) (0) | 2021.07.20 |
[디자인패턴] 데코레이터 패턴(Decorator Pattern) (0) | 2021.07.19 |
[디자인패턴] 퍼사드 패턴(Facade Pattern) (0) | 2021.07.19 |
[디자인패턴] 템플릿메소드(Template Method Pattern) (0) | 2021.07.19 |