(디자인패턴 - 전략패턴
전략 패턴
- 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)
- 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 디자인 패턴으로 다음의 특징을 가짐
- 특정한 알고리즘을 정의하고
- 각 알고리즘을 캡슐화
- 해당 계열 안에서 상호 교체가 가능하도록 함
- 위와 같은 특징을 구현하기 위해 다음 세가지 요소로 구성
- 전략 메서드를 가진 전략 객체
- 전략 객체를 사용하는 컨텍스트
- 전략 객체를 생성해 컨텍스트를 주입하는 클라이언트
- 전략은 알고리즘을 사용하는 클라이언트와 독립적으로 다양하게 만들 수 있음
코드
import abc
class Duck:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def display(self):
pass
def perform_fly(self):
self.fly_behavior.fly()
def perfrom_quack(self):
self.quack_behavior.quack()
- Duck 클래스를 생성, 상세 행동은 구현하지 않음
class FlyBehavior:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def fly(self):
pass
class FlyWithWings(FlyBehavior):
def fly(self):
print("Fly with wings")
class FlyNoWay(FlyBehavior):
def fly(self):
print("Fly no way")
class QuackBehavior:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def quack(self):
pass
class Quack(QuackBehavior):
def quack(self):
print("Quack Quack")
class MuteQuack(QuackBehavior):
def quack(self):
print("Mute...")
class MallardDuck(Duck):
def __init__(self):
self.fly_behavior = FlyNoWay()
self.quack_behavior = Quack()
def display(self):
print("Mallard Duck")
- 새로운 오리를 생성할 때, Duck을 상속받고, 추가적인 행동을 정의하여 사용할 수 있음
참조