[디자인 패턴] Strategy Pattern

김유상·2022년 11월 2일
0

디자인패턴

목록 보기
2/2

Referenced: https://www.youtube.com/watch?v=Wao5HiXM_Cg&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=4

영상에서는 Java를 이용해 패턴을 적용했지만 python으로 새롭게 구현해보자는 취지에서 작성했다. python에서는 인터페이스를 생성할 수 없어서 따로 만들지 않았고 생성을 강제할 필요가 있는 SumStrategy의 get() 메서드만 추상 클래스속 추상 메서드로 정의했다.

이렇게 되면 필수 동작에 대해 여러 가지 수행 방법을 정의할 수 있고 방법이 달라질 때마다 SumPrinter에서 코드 수정이 필요하지 않다.

from abc import *

class SumPrinter:
    def print(self, sumStrategy, N):
        print("The Sum of 1 -", N, ": ", end="")
        print(sumStrategy.get(N))

class SumStrategy(metaclass = ABCMeta):
    @abstractmethod
    def get(N):
        pass

class SimpleSumStrategy(SumStrategy):
    def get(N):
        sum = N

        for i in range(N):
            sum += i

        return sum

class GaussSumStrategy(SumStrategy):
    def get(N):
        return int(N*(N+1)/2)

if __name__ == "__main__":
    sum_printer = SumPrinter()

    sum_printer.print(SimpleSumStrategy, 100)
    sum_printer.print(GaussSumStrategy, 100)
profile
continuous programming

0개의 댓글