[Java] 전략패턴(strategy pattern)

Junseo Kim·2021년 2월 10일
0

[디자인 패턴]

목록 보기
1/3

전략패턴이란?

디자인 패턴의 꽃이라고 불릴만큼 많이, 다양하게 사용하는 패턴이다.
알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 즉 기존 코드의 변경 없이도 실제 로직을 바꿀 수 있게 해주는 패턴이다.

1) 먼저 필요한 strategy 인터페이스를 만들어준다.

public interface MoveStrategy {
    int moveValue();
}

2) 해당 인터페이스를 필요한 기능에 따라 실제로 구현한다.

public class RandomMove implements MoveStrategy {
    private static final int MIN_NUMBER = 0;
    private static final int MAX_NUMBER = 9;

    @Override
    public int moveValue() {
        return RandomUtils.nextInt(MIN_NUMBER, MAX_NUMBER);
    }
}
public class UnconditionalMove implements MoveStrategy {
    private static final int MOVE_STANDARD = 4;

    @Override
    public int moveValue() {
        return MOVE_STANDARD;
    }
}

3) 사용하는 쪽에서는 인터페이스 타입을 매개변수로 받아 사용한다.

public class Car {
    private static final int MOVING_BASELINE = 4;
    private int position;
    
    /*...*/
    
    public void move(MoveStrategy moveStrategy) {
    	if (moveStrategy.moveValue() >= MOVING_BASELINE) {
            this.position++;
        }
    }
}

4) 클라이언트에서 사용할 때 전략만 바꿔 끼워주면 코드 변경없이 실제 로직이 바뀐다.

public class Application {
    public static void main(String[] args) {
		Car car = new Car();
        
        car.move(new RandomMove());
        car.move(new UnconditionalMove());
    }
}

0개의 댓글