92. 디자인 패턴/행위(Behavioral)

01. 자바 전략 패턴 (JAVA Strategy Pattern)

THE HEYDAZE 2020. 6. 18. 09:04

 

# 설명

전략패턴은 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고

각각 캐슐화 한 후 서로 교환해서 사용 할 수 있는 패턴이다

 

# 장점

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