티스토리 뷰
728x90
1. 전략 패턴
- 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴
- 컨텍스트에서 사용할 알고리즘을 클라이언트가 선택한다.
2. 상태 패턴 적용
2.1. 적용 전 코드
- 전략(Speed)을 바꿔야할 경우, BlueLightRedLight 코드를 그 때마다 수정해줘야한다.
public class BlueLightRedLight {
private int speed;
public BlueLightRedLight(int speed) {
this.speed = speed;
}
public void blueLight() {
if (speed == 1) {
System.out.println("무 궁 화 꽃 이");
} else if (speed == 2) {
System.out.println("무궁화꽃이");
} else {
System.out.println("무광꼬치");
}
}
public void redLight() {
if (speed == 1) {
System.out.println("피 었 습 니 다.");
} else if (speed == 2) {
System.out.println("피었습니다.");
} else {
System.out.println("피어씀다");
}
}
}
public class Client {
public static void main(String[] args) {
BlueLightRedLight blueLightRedLight = new BlueLightRedLight(3);
blueLightRedLight.blueLight();
blueLightRedLight.redLight();
}
}
2.2. 상태 패턴 적용 후 코드
- 전략(Speed) 별로 분리된 클래스를 생성하여 Client에게 상황에 맞게 필요한 인스턴스를 주입받는다.
public interface Speed {
void blueLight();
void redLight();
}
public class Normal implements Speed {
@Override
public void blueLight() {
System.out.println("무 궁 화 꽃 이");
}
@Override
public void redLight() {
System.out.println("피 었 습 니 다.");
}
}
public class Faster implements Speed {
@Override
public void blueLight() {
System.out.println("무궁화꽃이");
}
@Override
public void redLight() {
System.out.println("피었습니다.");
}
}
public class Fastest implements Speed{
@Override
public void blueLight() {
System.out.println("무광꼬치");
}
@Override
public void redLight() {
System.out.println("피어씀다.");
}
}
public class Client {
public static void main(String[] args) {
BlueLightRedLight game = new BlueLightRedLight();
game.blueLight(new Normal());
game.redLight(new Fastest());
}
}
3. 장단점
3.1. 장점
- 새로운 전략을 추가하더라도 기존 코드를 수정하지 않는다
- 상속 대신 위임을 사용할 수 있다.
- 런타임에 전략을 변경할 수 있다.
3.2. 단점
- 복잡도가 증가한다.
- 클라이언트 코드가 구체적인 전략을 알아야 한다.
위글은 인프런의 코딩으로 학습하는 GoF의 디자인 패턴강의를 정리하였습니다.
백기선님의 수락으로 정리하였으며 더 자세한 내용은 강의를 수강하시기 바랍니다.
https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard
728x90
'디자인 패턴' 카테고리의 다른 글
22. 템플릿 메소드 패턴 (0) | 2022.02.11 |
---|---|
20. 상태(State) 패턴 (0) | 2022.02.11 |
19. 옵저버 패턴 (0) | 2022.02.11 |
18. 메멘토 패턴 (0) | 2022.02.10 |
17. 중재자 패턴 (0) | 2022.02.10 |
댓글