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 피자팩토리()로 구현함, 숫자,문자열 등을 전달함에 따라 다른 타입의 객체를 생성하는 것을 볼 수 있다. 전달받은 값에 따라 다른 객체를 생성해 인스턴스 타입을 정함
파이썬
# 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
'🥝CS' 카테고리의 다른 글
[ComputerScience]디자인패턴 // MVC 패턴 - 모델,뷰,컨트롤러 패턴 외 패턴 (0) | 2022.08.10 |
---|---|
[ComputerScience]디자인패턴 // 프록시패턴과 프록시서버 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 전략패턴과 옵저버패턴 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 싱글톤패턴 (0) | 2022.08.10 |
[ComputerScience] 라이브러리 vs 프레임워크 (0) | 2022.08.08 |
댓글