전략 패턴

오젼·2024년 4월 30일
0

어떤 방식을 다양하게 구현해야 할 때 -> 전략 패턴을 사용

strategy interface -> concrete strategy

예시

랜덤하게 움직이는 방식을 사용한다고 할 때

Strategy interface

public interface MoveStrategy {
    boolean canMove();
}

Concrete strategy

public class RandomMoveStrategy implements MoveStrategy {
    private static final int THRESHOLD = 4;
    private static final Random random = new Random();

    @Override
    public boolean canMove() {
        return random.nextInt(10) >= THRESHOLD;
    }
}

이런식으로 사용해줄 수 있음.

전략 패턴을 사용하면 알고리즘을 별도의 전략 클래스로 캡슐화하고, 실행 시점에 해당 전략 객체를 주입하여 행위를 변경할 수 있습니다. 이를 통해 코드 변경 없이 유연하게 알고리즘을 변경할 수 있습니다.

-> 전략을 여러 개 만들고 때에 따라서 맞는 전략으로 사용할 수 있음.
함수 매개변수는 interface 타입으로 정의하고 인자로 넘겨줄 때 그 때 필요한 concrete strategy 객체를 넘겨주면 되는 거임.

정의

public RacingGameController(final List<String> names, final int tries, final MoveStrategy strategy) {
        this.cars = new Cars(names, strategy);
        this.tries = tries;
    }

사용

public static void main(String[] args) {
        List<String> names = InputView.inputNames();
        int tries = InputView.inputTries();

        RacingGameController controller = new RacingGameController(names, tries, new RandomMoveStrategy());
        controller.start();
    }

기존 방식이랑 비교

아하 기존에 있는 클래스를 손 대지 않는다는 게 중요하네
그리고 단일책임원칙도 중요

0개의 댓글