디자인 패턴 - 팩토리 패턴(Factory Pattern)

디자인 패턴이란?

디자인 패턴이란? 게시글을 참고하자.

생성(Creational) 패턴 구조(Structural) 패턴 행동(Behavioral) 패턴
Singleton Adapter Command
Abstract Factory Composite Interpreter
Factory Method Decorator Iterator
Builder Facade Mediator
Prototype Flyweight Memento
  Proxy Observer
    State
    Strategy
    Template Method

팩토리 패턴

팩토리 메서드 패턴은 객체지향 디자인 패턴이다. 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이고 또 자식 클래스가 어떤 객체를 생성할지 결정하도록 하는 패턴이기도 하다. 혹은 부모 클래스에 구체 클래스 이름을 감추기 위한 방법으로도 사용되기도 한다.

Template Method의 생성 패턴 버전으로도 볼 수 있다

팩토리 메서드가 중첩되기 시작하면 프로그램은 굉장히 복잡해진다. 또 상속을 사용하지만 부모 클래스는 전혀 확장하기 않기 때문에 이 패턴은 extends 관계를 잘못 이용한 것으로도 볼 수 있다. extends 관계를 남발하면 프로그램의 복잡도가 증가하므로 팩토리 메서드 패턴의 사용에 주의해야 한다.

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
class Chicken:
  FRIED_TYPE = 0
  SEASONED_TYPE = 1
  SOY_TYPE = 2

  def __init__(self):
    self.__price = None

  def getPrice(self):
    return self.__price

class FriedChicken(Chicken):
  def __init__(self):
    self.__price = 1.5

class SeasonedChicken(Chicken):
  def __init__(self):
    self.__price = 1.8

class SoyChicken(Chicken):
  def __init__(self):
    self.__price = 2

class ChickenFactory:
  def createChicken(self, chickenType):
    if chickenType == Chicken.FRIED_TYPE:
      return FriedChicken()
    elif chickenType == Chicken.SEASONED_TYPE:
      return SeasonedChicken()
    elif chickenType == Chicken.SOY_TYPE:
      return SoyChicken()

chickenPrice = ChickenFactory().createChicken(Chicken.FRIED_TYPE).getPrice()
print "$%.02f" % chickenPrice

댓글남기기