DesignPatterns에서 BehavioralPatterns의 하나.

특정 엔티티(context)와 그들의 행위(Strategy)를 분리시키고 이들을 관계짓는다. startegy는 여러개의 sub class들을 포함하고 있으며, context는 어떤 sub class와 연결되는지 몰라도 된다.

[Algorithm]이 분리된다. 다양한 형태의 [Algorithm]들을 하나의 API에 맞도록 동작시킨다.

Structure

Example in our project

어떤 데이터들을 가지고 그래프를 그리는 부분이 있다고 하자. 이 부분을 context라 하고, 실제 그래프를 그리는 행위가 strategy가 된다. 그래프는 선그래프일지 바그래프일지 원그래프일지가 startegy의 sub class들이 된다.

context

class Chart:
    def __init__(self, aStrategy):
        self.strategy = aStrategy
    def draw(self)
        self.strategy.drawOn()

strategy

class DrawStrategy:
    def drawOn(self):
        raise NotImplementError

class LineDrawStrategy(DrawStrategy):
    def drawOn(self):
        pass

class CircleDrawStrategy(DrawStrategy):
    def drawOn(self):
        pass

in use example

lineChart = Chart(LineDrawStrategy())
lineChart.draw()

[Java]로 구현한 가위바위보 게임 --> [StrategyHand.java]

관련정보들

StrategyPattern


CategoryPattern

web biohackers.net