Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개발
- 웹개발
- 리액트
- 솔로드릴
- 개발자
- Redux
- 디자인패턴
- Node
- 프로그래밍
- JavaScript
- 주짓떼로
- 주짓떼라
- 파이썬
- 영화리뷰
- nodejs
- 영화
- 드릴
- 노드
- 엄티로드
- git
- 클로즈가드
- graphQL
- 자바스크립트
- web
- 주짓수
- REACT
- development
- 영화감상
- Express
- 하프가드
Archives
- Today
- Total
As i wish
[Design pattern] Factory method pattern (팩토리 메소드 패턴) 본문
안녕하세요.
오늘은 팩토리 메서드 패턴 을 알아보겠습니다.
늘 그러하듯 정의부터 보시죠.
Factory method pattern
객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다.
즉 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것.
출처: https://jusungpark.tistory.com/14?category=630296 [정리정리정리]
쉽게 말해서 하위 클래스가 어떤 객체를 설정할지를 결정한다라고 보시면 될듯 하네요.
다른 포스팅과는 다르게 UML 다이어그램부터 보겠습니다.
제가 그린 UML 다이어그램에서 PizzaStore는 Creator
Pizza는 Product가 되죠.
이처럼 Pizzastore는 ChicagoPizza 또는 NYPizza store만 설정을 하고 이 각각의 서브 클래스들(ChicagoPizzaStore, NYPizzaStroe)이
어떤 스타일에 Product를 설정할지 결정한다고 생각하시면 쉬울 듯 하네요.
역시나 코드로 보는게 훨씬 이해하기 편한것 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | # -*- coding: utf-8 -*- # FactoryMethod Pattern import abc class Pizzastore: __metaclass__ = abc.ABCMeta def orderPizza(self, type): pizza = self.createPizza(type) pizza.prepare() pizza.bake() pizza.cut() pizza.box() return pizza @abc.abstractmethod def createPizza(self, type): pass class ChicagoPizzaStore(Pizzastore): def createPizza(self, type): pizza = None if type == 'CHEESE': pizza = ChicagoCheesePizza() elif type == 'PEPPERONI': pizza = ChicagoPepperoniPizza() else: pizza =ChicagoPizza() return pizza class NYPizzaStore(Pizzastore): def createPizza(self, type): pizza = None if type == 'CHEESE': pizza = NYCheesePizza() elif type == 'PEPPERONI': pizza = NYPepperoniPizza() else: pizza = NYPizza() return pizza class Pizza: __metaclass__ = abc.ABCMeta def prepare(self): print('Prepare %s' %self.name) print('Dough %s' %self.dough) print('Sauce %s' %self.sauce) def bake(self): print('Bake %s' %self.name) def cut(self): print('Cut %s' %self.name) def box(self): print('Boxing %s' %self.name) class ChicagoPizza(Pizza): def __init__(self): self.name = 'Chicago Pizza' self.dough = 'None' self.sauce = 'None' class ChicagoCheesePizza(Pizza): def __init__(self): self.name = 'Chicago Cheese Pizza' self.dough = 'Chicago Cheese' self.sauce = 'Chicago sauce' class ChicagoPepperoniPizza(Pizza): def __init__(self): self.name = 'Chicago Pepperoni Pizza' self.dough = 'Chicago Pepperoni' self.sauce = 'Chicago sauce' class NYPizza(Pizza): def __init__(self): self.name = 'NY Pizza' self.dough = 'None' self.sauce = 'None' class NYCheesePizza(Pizza): def __init__(self): self.name = 'NY Pizza' self.dough = 'NY cheese' self.sauce = 'NY sauce' class NYPepperoniPizza(Pizza): def __init__(self): self.name = 'NY Pizza' self.dough = 'NY pepperoni' self.sauce = 'NY sauce' chicagoStore = ChicagoPizzaStore() nyStore = NYPizzaStore() nyStore.orderPizza('CHEESE') print("###############") chicagoStore.orderPizza('PEPPERONI') print("############") chicagoStore.orderPizza('CHEESE') | cs |
'Design Pattern' 카테고리의 다른 글
[Design pattern] Singleton pattern (싱글톤 패턴) (0) | 2019.03.10 |
---|---|
[Design pattern] Abstact Factory pattern (추상 팩토리 패턴) (0) | 2019.02.17 |
[Design pattern] Decorator pattern(데코레이터 패턴) (0) | 2019.01.27 |
[Design pattern] Observer pattern(옵저버 패턴) (0) | 2019.01.21 |
[Design pattern] Strategy pattern(스트래티지 패턴, 전략패턴) (0) | 2019.01.14 |
Comments