본문 바로가기

디자인패턴

[디자인패턴] 전략 패턴(Strategy Pattern)

정의

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

 

예시)

게임 캐릭터가 착용한 무기에 따라 공격의 행위가 달라진다.  칼, 활, 창, 맨손 등 공격을 하는 행위는 동일하나 필요에 따라 무기를 바꾸어 공격할 수 있다.

 

  • 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

실행결과

 

 

 

 

 참조

https://velog.io/@y_dragonrise/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B4Strategy-Pattern

 

[디자인 패턴] 전략 패턴(Strategy Pattern)

[디자인 패턴] 전략 패턴(Strategy Pattern)

velog.io

https://velog.io/@kyle/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%84%EB%9E%B5%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80

 

디자인 패턴 : 전략패턴이란?

디자인 패턴에서 전략패턴이란 무엇인가?

velog.io

https://victorydntmd.tistory.com/292

 

[디자인패턴] 전략 패턴 ( Strategy Pattern )

전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우

victorydntmd.tistory.com