📌 변경될 가능성이 높은 어떤 알고리즘을 쉽고 효과적으로 교체할 수 있도록 하는 패턴
인터페이스를 정의한다.
//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); } }