출처 | https://www.youtube.com/watch?v=Wao5HiXM_Cg&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=3
어떠한 상황적 이유로 단계3을 변경하게 될 때, Strategy 디자인 패턴을 사용한다.
SumPrinter는 1~N의 총합을 출력해주는 클래스
SumPrinter을 이용하여 값을 가져온다 SumStrategy 인터페이스를 구현한 simpleSumStrategy , GaussSumStrategy 패턴에서 총 합을 계산하는 클래스를 제공한다.[실제 총 합을 계산하는 클래스는 언급된 2개다]
SumPrinter는 simpleSumStrategy클래스와 GaussSumStrategy의 존재를 알지못한다. 추후에 총합을 계산하는 방법이 추가되면 SumPrinter의 코드를 수정할 필요가 없다,
package DesignPattern.Strategy;
public class SumPrinter {
//~N까지의 총합을 출력하는 메소드
void print(SumStrategy strategy, int N)
{
System.out.println(strategy.get(N));
}
}
package DesignPattern.Strategy;
public class MainEntry {
public static void main(String[] args) {
SumPrinter cal =new SumPrinter();
cal.print(new SimpleSumStrategy(), 10);
cal.print(new GaussSumStrategy(), 10);
}
}
package DesignPattern.Strategy;
public interface SumStrategy {
int get(int N);
}
package DesignPattern.Strategy;
public class SimpleSumStrategy implements SumStrategy{
@Override
public int get(int N) {
int sum = N;
for(long i = 1; i<N; i++)
{
sum += i;
}
return sum;
}
}
package DesignPattern.Strategy;
public class GaussSumStrategy implements SumStrategy{
@Override
public int get(int N) {
return (N+1)*N/2;
}
}