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):
passin use example
lineChart = Chart(LineDrawStrategy()) lineChart.draw()
[Java]로 구현한 가위바위보 게임 --> [StrategyHand.java]
BioHackersNet