본문 바로가기
🥝CS

[ComputerScience]디자인패턴 // 팩토리패턴

by 김말자 2022. 8. 10.
728x90
728x90
BIG

팩토리패턴(factory pattern)

  • 객체지향 디자인 패턴중하나
  • 객체를 사용하는 코드에서 객체 생성부분을 떼내서 추상화한 패턴
  • 그리고 상위 클래스가 뼈대를 결정하고 하위클래스에서 객체 생성에 대한 내용을 결정
  • 팩토리메쏘드는 부모클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이고, 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴
  • 부모클래스코드에 구체 클래스 이름을 감추기 위한 방법으로 사용
  • 팩토리메소드가 중첩되기 시작하면 굉장히 복잡해질 수 있는 단점이 있음
  • 상속을 사용하지만 부모클래스를 전혀 확장하지 못함
  • 유지보수가 좋음(리팩터링해도)

종류

자바스크립트

//Our pizzas
function HamAndMushroomPizza(){
  var price = 8.50;
  this.getPrice = function(){
    return price;
  }
}

function DeluxePizza(){
  var price = 10.50;
  this.getPrice = function(){
    return price;
  }
}

function SeafoodPizza(){
  var price = 11.50;
  this.getPrice = function(){
    return price;
  }
}

//Pizza Factory
function PizzaFactory(){
  this.createPizza = function(type){
     switch(type){
      case "Ham and Mushroom":
        return new HamAndMushroomPizza();
      case "DeluxePizza":
        return new DeluxePizza();
      case "Seafood Pizza":
        return new SeafoodPizza();
      default:
          return new DeluxePizza();
     }
  }
}

//Usage
var pizzaPrice = new PizzaFactory().createPizza("Ham and Mushroom").getPrice();
alert(pizzaPrice);

출저 나무위키

new 피자팩토리()로 구현함, 숫자,문자열 등을 전달함에 따라 다른 타입의 객체를 생성하는 것을 볼 수 있다. 전달받은 값에 따라 다른 객체를 생성해 인스턴스 타입을 정함

코코도르 디퓨저 200ml x 2p, 에이프릴 프레쉬Apple 2022 맥북 에어, 스타라이트, M2 8코어, GPU 8코어, 256GB, 8GB, 30W, 영문라온 LG그램 맥북 노트북 슬리브파우치, 오트밀카키노트북파우치 맥북가방 13인치 15인치 17인치퍼니메이드 캔버스 노트북 파우치 + 가죽 마우스패드, 인디블루(파우치)로마네 브런치브라더 바게트베어 EVA 하드 노트북 파우치 13형끼움 맥북 노트북 슬림 가죽 슬리브 포트폴리오 파우치, 스카이블루

파이썬

# Our Pizzas

class Pizza:
    HAM_MUSHROOM_PIZZA_TYPE = 0
    DELUXE_PIZZA_TYPE = 1
    SEAFOOD_PIZZA_TYPE= 2

    def __init__(self):
        self.__price = None

    def getPrice(self):
        return self.__price

class HamAndMushroomPizza(Pizza):
    def __init__(self):
        self.__price = 8.50

class DeluxePizza(Pizza):
    def __init__(self):
        self.__price = 10.50

class SeafoodPizza(Pizza):
    def __init__(self):
        self.__price = 11.50

class PizzaFactory:
    def createPizza(self, pizzaType):
        if pizzaType == Pizza.HAM_MUSHROOM_PIZZA_TYPE:
            return HamAndMushroomPizza()
        elif pizzaType == Pizza.DELUXE_PIZZA_TYPE:
            return DeluxePizza()
        elif pizzaType == Pizza.SEAFOOD_PIZZA_TYPE:
            return SeafoodPizza()
        else:
            return DeluxePizza()

# Usage
pizzaPrice = PizzaFactory().createPizza(Pizza.HAM_MUSHROOM_PIZZA_TYPE).getPrice()
print "$%.02f" % pizzaPrice

출저 나무위키

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

728x90
반응형
BIG

댓글