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