티스토리 뷰
팩토리 메소드 패턴을 Python으로 구현해보았습니다.
구현 내용
커피 가맹점에서 판매하는 커피의 종류가 다양하고, 가격도 모드 다릅니다. 커피의 이름과 가격은 가맹점의 위치에 따라서 변경이 가능합니다. aCafe의 위치는 사람이 적고, 학생들이 많이 모여있는 곳입니다. bCafe는 번화가에 차려진 카페입니다. 그에 따라 가격 조정이 필요한 가맹점입니다.
팩토리 메소드 패턴 다이어그램
CafeStore와 Coffee가 있습니다.
CafeStore에서는 주문 들어온 커피의 종류를 구분하는 팩토리메소드 aCafe와 bCafe가 있습니다.
커피는 가격과 이름정보를 가지며, 커피의 종류는 5개로 구분하였습니다. 아이스커피, 아이스커피 화이트 밀크, 핫초코, 커피, 에스프레소 입니다. 이 이름들은 클래스의 이름이지 실제 이름은 가맹점마다 다르게 동작합니다.
구현
cafeStore.py - cafeStore에서 커피의 종류를 생성할 수 있습니다. order에 따라서 커피의 종류를 불러오게 됩니다.
from coffee import * class CafeStore: COFFEE = 0 ICEDCOFFEE = 1 ICEDCOFFEEWITHMILK = 2 HOTCHOCOLATE = 3 ESPRESSO = 4 def __init__(self, order): order.getCoffee() #aCafe Factory class aCafe: def orderCoffee(self, order): if order == CafeStore.COFFEE: return aCafeCoffee() elif order == CafeStore.ICEDCOFFEE: return aCafeIcedCoffee() elif order == CafeStore.ICEDCOFFEEWITHMILK: return aCafeIcedCoffeeWithMilk() elif order == CafeStore.HOTCHOCOLATE: return aCafeHotChocolate() elif order == CafeStore.ESPRESSO: return aCafeEspresso() #bCafe Factory 는 aCafe Factory 동일하여 제외하였습니다.
coffee.py - 커피의 종류에 따른 가격, 이름을 정하는 클래스입니다. Coffee가 추상메소드의 역할을 수행하게 됩니다.
class Coffee: def __init__(self): self.price = 0 self.name = None def getCoffee(self): print "Coffee Name : ", self.name, ", Price : ", self.price #aCafe Coffee class aCafeIcedCoffee(Coffee): def __init__(self): self.price = 4000 self.name = "aCafe Iced Coffee" #coffee 종류에 따른 가격과 이름을 정하는 클래스 class aCafeIcedCoffeeWithMilk(Coffee): def __init__(self): self.price = 5000 self.name = "aCafe Iced Coffee With Milk" #나머지 9개의 패턴에대해서는 제외합니다. 위의 내용과 동일하며 가격과 이름만 다르게 됩니다.
main 입니다. main에서 CafeStore에 따라서 aCafe, bCafe의 커피를 서로 다르게 호출 합니다.
if __main__ == '__main__': CafeStore(aCafe().orderCoffee(CafeStore.COFFEE)) CafeStore(bCafe().orderCoffee(CafeStore.ESPRESSO)) CafeStore(bCafe().orderCoffee(CafeStore.ICEDCOFFEE))
구현 완료
마무리
팩토리 메소드를 Python으로 구현해보았습니다. 예제코드 자체는 제가 만들었지만 기본적인 내용은 wiki백과를 참고하였습니다.
전체코드는 아래 더보기를 눌러서 다운 받으시면 됩니다.
'Programming language' 카테고리의 다른 글
Tistory CSS를 이용하여 img 사이즈 조절하기 (0) | 2012.12.12 |
---|---|
HTML 5 video 코드 사용 및 jQuery로 동영상 동적 load (2) | 2012.12.03 |
구글 Web Fonts에서 제공하는 나눔글꼴을 tistory에 적용하기 (10) | 2012.10.31 |
html 5 기반의 음성입력 Speech Input 추가 (0) | 2012.09.23 |
Python Daemon 생성 예제 코드 (0) | 2012.08.19 |
댓글