1. 정의
- 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 한다. 전략패턴을 이용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.
2. 예시
- 오리가 소리 내는 행동을 수정하고 싶다.
3. 그림
4. 클래스 다이어그램
5. 코드
public class Client{
// 꽥 소리가 나는 행동을 사용하고 싶을 때
QuckBehavior behavior = new Quack();
behavior.quck(); // 꽥
// 삑 소리가 나는 행동을 사용하고 싶을 때
QuckBehavior behavior = new Squeak();
behavior.quck(); // 삑
// 소리를 내고 싶지 않을 때
QuckBehavior behavior = new MuteQuack();
behavior.quck(); // 소리를 내지 않음
}
public interface QuackBehavior{
public void quck();
}
public class Quack implements QuackBehavior{
public void quack(){
System.out.println("꽥");
}
}
public class Squeck implements QuackBehavior{
public void quack(){
System.out.println("삑");
}
}
public class MuteQuack implements QuackBehavior{
public void quack(){
System.out.println("소리를 내지 않음");
}
}
6. 설명
- 소리가 나는 행동을 Quack, Squeck, MuteQuack으로 알고리즘군을 정의하고 있음
- 각 행동을 QuackBehavior로 캡슐화 했음
- Client는 QuackBehavior만을 바라보고 있음(참조변수가 QuackBehavior임)
- 사용하고 싶은 소리 행동(전략)을 마음껏 수정할 수 있음
- 소리가 나는 행동을 Client로 부터 분리하여 독립적으로 쓸 수 있음
💡 Client가 외부로부터 QuackBehavior을 주입 받으면, 완전히 독립적이게 됨
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) (0) | 2022.11.17 |
---|---|
디자인 패턴 - 팩토리 메소드 패턴(Factory Method Pattern) (0) | 2022.11.17 |
디자인 패턴 - 추상 팩토리 패턴(Abstract Factory Pattern) (0) | 2022.11.17 |
디자인 패턴 - 데코레이터 패턴(Decorator Pattern) (0) | 2022.11.17 |
디자인 패턴 - 옵저버 패턴(Observer Pattern) (0) | 2022.11.17 |