디자인 패턴 - Strategy

지환·2023년 8월 12일
0

자바[디자인패턴]

목록 보기
2/3

출처 | https://www.youtube.com/watch?v=Wao5HiXM_Cg&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=3

Strategy

어떠한 상황적 이유로 단계3을 변경하게 될 때, Strategy 디자인 패턴을 사용한다.

  • SumPrinter는 1~N의 총합을 출력해주는 클래스

  • SumPrinter을 이용하여 값을 가져온다 SumStrategy 인터페이스를 구현한 simpleSumStrategy , GaussSumStrategy 패턴에서 총 합을 계산하는 클래스를 제공한다.[실제 총 합을 계산하는 클래스는 언급된 2개다]

  • SumPrinter는 simpleSumStrategy클래스와 GaussSumStrategy의 존재를 알지못한다. 추후에 총합을 계산하는 방법이 추가되면 SumPrinter의 코드를 수정할 필요가 없다,

코드

SumPrinter

package DesignPattern.Strategy;

public class SumPrinter {
    //~N까지의 총합을 출력하는 메소드
    void print(SumStrategy strategy, int N)
    {
        System.out.println(strategy.get(N));
    }
}

MainEntry

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);
    }
}

SumStrategy

package DesignPattern.Strategy;

public interface SumStrategy {
    int get(int N);
}

SimpleSumStrategy

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;
    }
}

GaussSumStrategy

package DesignPattern.Strategy;

public class GaussSumStrategy implements  SumStrategy{
    @Override
    public int get(int N) {
        return (N+1)*N/2;
    }
}

profile
아는만큼보인다.

0개의 댓글