[Design Pattern] 전략 패턴(Strategy)

YounDitt·2020년 10월 12일
0

Design Patterns

목록 보기
1/4

Strategy Pattern

📌 변경될 가능성이 높은 어떤 알고리즘을 쉽고 효과적으로 교체할 수 있도록 하는 패턴

인터페이스를 정의한다.

//ISumStrategy.java
public interface ISumStrategy {
    long sum(long N);
}

인터페이스를 상속받아 구체적인 구현클래스를 생성한다.

//SimpleSumStrategy.java
public class SimpleSumStrategy implements ISumStrategy{
    @Override
    public long sum(long N) {
        long sum = N;
        for(long i=1; i<N; i++) {
            sum += i;
        }
        return sum;
    }
}
//GaussSumStrategy.java
public class GaussSumStrategy implements ISumStrategy {
    @Override
    public long sum(long N) {
        return (N + 1) * N / 2;
    }
}

의존관계를 설정하여 다양한 전략(Strategy)로 쉽게 변경이 가능하다.

//Calculator.java
public class Calculator {
    private ISumStrategy strategy;
    public Calculator(ISumStrategy strategy) {
        this.strategy = strategy;
    }
    public double run(int N) {
        return Math.log(strategy.sum(N));
    }
}
//Main.java
public class Main {
    public static void main(String[] args) {
        Calculator cal1 = new Calculator(new SimpleSumStrategy());
        Calculator cal2 = new Calculator(new GaussSumStrategy());
        double result1 = cal1.run(10000000);
        double result2 = cal2.run(10000000);
    }
}

🙌 코드의 변화를 최소화 하면서 확장이 가능하다

#DI에 적용 #행위패턴의 하나


참고

profile
Hello, Android

0개의 댓글