Design Pattern/행위 패턴

Strategy Pattern

실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴

특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다.

 

이점

컨텍스트 코드의 변경 없이 새로운 전략을 추가할 수 있다는 점입니다. 새로운 정책이 추가될 때 Strategy 인터페이스를 상속받아서 class를 구현하면 됩니다. 기존의 코드를 변경할 필요가 없죠.

 

 

public interface Strategy {
    public int doOperation(int num1, int num2);
}
public class OperationAdd implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}
public class OperationSubtract implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}
public class OperationMultiply implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

 

생성자를 통해서 전략을 선택

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

 

전략에 따라서 실행되는 로직이 달라짐

public class StrategyPatternDemo {
    public static void main(String[] args) {
        Context context = new Context(new OperationAdd());
        System.out.println(context.executeStrategy(10, 5)); // 15

        context = new Context(new OperationSubtract());
        System.out.println(context.executeStrategy(10, 5)); // 5

        context = new Context(new OperationMultiply());
        System.out.println(context.executeStrategy(10, 5)); // 50
    }
}

'Design Pattern > 행위 패턴' 카테고리의 다른 글

Template Method Pattern  (0) 2021.06.24
Strategy 전략 프로젝트에 적용 해보기  (0) 2021.05.28
State Pattern  (0) 2021.05.13
Command Pattern  (0) 2021.05.12