01. 자바 전략 패턴 (JAVA Strategy Pattern)
# 설명
전략패턴은 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고
각각 캐슐화 한 후 서로 교환해서 사용 할 수 있는 패턴이다
# 장점
1. 코드 중복 방지
2. 런타임(Runtime)시에 타겟 메소드 변경
3. 확장성(신규 클래스) 및 알고리즘 변경 용이
# 구조
게임이라고 가정하였을 때
JumpBehaivor.java (E_Interface Impl) 을 생성하여
점프를 구현할 수 있다.
(확장성에 좋음)
# Interface
1
2
3
4
5
6
7
8
|
/** 자동차 움직임 */
public interface CarMoveBehavior {
/** 액션 */
void action();
}
|
cs |
# Impl
UpMoveBehavior.java
1
2
3
4
5
6
7
8
9
|
/** 위로 */
public class UpMoveBehavior implements CarMoveBehavior {
@Override
public void action() {
System.out.println("위로 움직여");
}
}
|
cs |
DownMoveBehavior.java
1
2
3
4
5
6
7
8
9
|
/** 아래로 */
public class DownMoveBehavior implements CarMoveBehavior {
@Override
public void action() {
System.out.println("아래로 움직여");
}
}
|
cs |
LeftMoveBehavior.java
1
2
3
4
5
6
7
8
9
|
/** 좌로 */
public class LeftMoveBehavior implements CarMoveBehavior {
@Override
public void action() {
System.out.println("좌로 움직여");
}
}
|
cs |
RightMoveBehavior.java
1
2
3
4
5
6
7
8
9
|
/** 우로 */
public class RightMoveBehavior implements CarMoveBehavior {
@Override
public void action() {
System.out.println("좌로 움직여");
}
}
|
cs |
# Context
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/** 차 */
public class Car {
private CarMoveBehavior carMoveBehavior;
public Car(CarMoveBehavior carMoveBehavior) {
this.carMoveBehavior = carMoveBehavior;
}
public void move() {
carMoveBehavior.action();
}
}
|
cs |
# Client
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** 사용자 */
public class Client {
public static void main(String[] args) {
Car car = new Car(new UpMoveBehavior()); /** 위로 움직여 클래스 */
car.move(); /** 위로 움직여 */
}
}
|
cs |
# Diagram
'92. 디자인 패턴 > 행위(Behavioral)' 카테고리의 다른 글
02. 자바 템플릿 메소드 패턴 (JAVA Template Method Pattern) (0) | 2020.06.18 |
---|