반응형
디자인패턴
[Java][디자인 패턴] 23. 전략 패턴 (Strategy Pattern)
전략 패턴은 객체 내부에서 해결해야 하는 목적을 알고리즘 객체로 분리 적용하는 기법이다. 실제 내부 동작을 외부 알고리즘 객체로 분리하여 유연하게 동작을 변경시킬 수 있다.
전략 패턴이란?
- 전략 패턴은 구조 그대로 사용하면서 캡슐화된 알고리즘으로 동작을 변경하는 행위 (전체 행위 변경)
- 전략 패턴은 행동 변경 시 조건문을 사용하지 않음. 알고리즘 캡슐화를 통해 조건문 없이도 원하는 행동으로 교체 가능하다. 하지만 알고리즘 객체가 교체된다는 점에서 실행 시 많은 수의 객체를 갖는다는 단점이 있다.
- 전략패턴은 다양한 알고리즘을 적용하여 처리할 때 매우 유용하여 다양한 경우에 사용된다.
전략 패턴 구조
전략 패턴 코드
1. Weapon 인터페이스
public interface Weapon {
void attack();
}
2. Weapon 구현체 클래스
public class Gun implements Weapon {
@Override
public void attack() {
System.out.println("총을 발포합니다.");
}
}
public class Knife implements Weapon {
@Override
public void attack() {
System.out.println("칼을 휘두릅니다.");
}
}
3. Strategy 추상 클래스
public abstract class Strategy {
protected Weapon delegate;
public void setDelegate(Weapon delegate) {
System.out.println("무기를 교환합니다.");
this.delegate = delegate;
}
abstract public void attack();
}
3. Strategy를 상속한 Character 클래스
public class Character extends Strategy {
@Override
public void attack() {
if (this.delegate == null) {
System.out.println("맨손 공격");
} else {
this.delegate.attack();
}
}
}
4. 테스트 코드
class CharacterTest {
@Test
@DisplayName("테스트")
void characterTest() {
Strategy strategy = new Character();
strategy.attack();
strategy.setDelegate(new Knife());
strategy.attack();
strategy.setDelegate(new Gun());
strategy.attack();
}
}
맨손 공격
무기를 교환합니다.
칼을 휘두릅니다.
무기를 교환합니다.
총을 발포합니다.
Github 코드
참고 자료
1.쉽게 바로 써먹는 디자인 패턴 책
http://www.yes24.com/Product/Goods/93173296
반응형
'개발 > 디자인패턴' 카테고리의 다른 글
[Java][디자인 패턴] 24. 인터프리터 패턴 (Interpreter Pattern) (0) | 2022.03.28 |
---|---|
[Java][디자인 패턴] 22. 템플릿 메서드 패턴 (1) | 2022.03.26 |
[Java][디자인 패턴] 21. 메멘토 패턴 (Memento Pattern) (0) | 2022.03.25 |
[Java][디자인 패턴] 20. 상태 패턴 (State Pattern) (0) | 2022.03.25 |
[Java][디자인 패턴] 19. 중재자 패턴 (Mediator Pattern) (0) | 2022.03.24 |