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 |
Tags
- 상가수익률계산기
- 릿코드
- binary search
- python priority queue
- 파이썬 알고리즘 풀기
- 릿코드 풀기
- 릿코드풀기
- 릿코드풀이
- 파이썬 릿코드
- python 알고리즘
- 잇츠디모
- 파이썬릿코드
- leetcode풀기
- python xor
- 파이썬알고리즘
- 코틀린기초
- 파이썬 알고리즘
- 파이썬릿코드풀기
- python zip_longest
- leetcode풀이
- 알고리즘풀기
- python sorted
- 파이썬 프로그래머스
- python Leetcode
- LeetCode
- 파이썬알고리즘풀기
- 알고리즘풀이
- 릿코드 파이썬
- leetcode 풀기
- python 릿코드
Archives
- Today
- Total
소프트웨어에 대한 모든 것
[디자인패턴][Factory Method] 팩토리 메소드 패턴 본문
반응형
팩토리 메소드 패턴 정의
팩토리 메소드는 가장 널리 사용되는 생성 패턴 중 하나입니다. '공장' 즉 객체를 생산하는 패턴인데 객체를 만들어 내는 부분을 서브 클래스에 위임하는 패턴이라고 할 수 있습니다.
팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있습니다. 이렇게 하면 슈퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있습니다.(by 헤드퍼스트 디자인패턴)
구상(Concrete) 형식의 인스턴스를 만드는 작업을 캡슐화
팩토리 메소드 패턴 클래스 다이어그램
팩토리 메소드 패턴 활용
빌딩 클래스가 있고, 빌딩은 유럽 스타일, 한국 스타일로 지어질 수 있습니다. 빌딩 클래스를 상속 받아서 병원 건물과 대학 건물을 지을 수 있습니다. 건설사 추상 클래스가 있고 유럽건설사와 한국건설사 있습니다. 유럽 건설사는 유럽스타일병원, 유럽스타일대학을 짓고 한국 건설사는 한국스타일병원, 한국스타일대학을 건설할 수 있습니다.
from abc import ABC, abstractmethod
class ConstructionFirm(ABC):
"""
건설사 추상 클래스
"""
def __init__(self):
self.name == None
@abstractmethod
def create(self, type):
pass
class EuropeConstructionFirm(ConstructionFirm):
def __init__(self):
self.name = "유럽건설사"
def create(self, building_type):
if building_type == "병원":
return EuropeStyleHospitalBuilding()
elif building_type == "대학":
return EuropeStyleUniversityBuilding()
else:
raise Exception('not supported building type')
class KoreaConstructionFirm(ConstructionFirm):
def __init__(self):
self.name = "한국건설사"
def create(self, building_type):
if building_type == "병원":
return KoreaStyleHospitalBuilding()
elif building_type == "대학":
return KoreaStyleUniversityBuilding()
else:
raise Exception('not supported building type')
class Building(ABC):
def __init__(self):
self.name = None
class EuropeStyleHospitalBuilding(Building):
def __init__(self):
self.name = "유럽 스타일 병원 빌딩"
print(f'{self.name} 완공')
class EuropeStyleUniversityBuilding(Building):
def __init__(self):
self.name = "유럽 스타일 대학 빌딩"
print(f'{self.name} 완공')
class KoreaStyleHospitalBuilding(Building):
def __init__(self):
self.name = "한국 스타일 병원 빌딩"
print(f'{self.name} 완공')
class KoreaStyleUniversityBuilding(Building):
def __init__(self):
self.name = "한국 스타일 대학 빌딩"
print(f'{self.name} 완공')
europeConstFirm = EuropeConstructionFirm()
europeConstFirm.create("병원")
europeConstFirm.create("대학")
koreaConstFirm = KoreaConstructionFirm()
koreaConstFirm.create("병원")
koreaConstFirm.create("대학")
출력
유럽 스타일 병원 빌딩 완공
유럽 스타일 대학 빌딩 완공
한국 스타일 병원 빌딩 완공
한국 스타일 대학 빌딩 완공
요약
- 객체 생성을 한 곳에 모아놓고 체계적 관리
- 의존성 역전 원칙에 따라 구체적인 것이 아니라 추상적인 것에 의존하는 설계
참고 자료'
https://en.wikipedia.org/wiki/Factory_method_pattern
https://im-yeobi.io/posts/design-pattern/factory-pattern-1/
반응형
'시스템 설계 및 디자인 > 디자인 패턴' 카테고리의 다른 글
[디자인패턴][Mediator] 중재자 패턴 (0) | 2022.03.24 |
---|---|
[디자인패턴][Observer] 옵저버 패턴 (0) | 2022.03.24 |
[디자인패턴][Prototype] 프로토타입 패턴 (0) | 2022.03.24 |
[디자인패턴][Composite] 컴포지트 패턴 (0) | 2022.03.24 |
[디자인패턴][Proxy] 프록시 패턴 (0) | 2022.03.24 |
Comments