참고 문서: https://github.com/faif/python-patterns
아래 글은 위 참고 문서를 토대로 만들어진 내용입니다.
객체를 생성하기 위한 인터페이스를 정의하는 것입니다.
return 되는 값이 객체를 생성 시키는 패턴입니다.
아래 코드를 봅시다!
class GreekLocalizer:
"""A simple localizer a la gettext"""
def __init__(self) -> None:
self.translations = {"dog": "σκύλος", "cat": "γάτα"}
def localize(self, msg: str) -> str:
"""We'll punt if we don't have a translation"""
return self.translations.get(msg, msg)
class EnglishLocalizer:
"""Simply echoes the message"""
def localize(self, msg: str) -> str:
return msg
def get_localizer(language: str = "English") -> object:
"""Factory"""
localizers = {
"English": EnglishLocalizer,
"Greek": GreekLocalizer,
}
return localizers[language]()
def main():
"""
# Create our localizers
>>> e, g = get_localizer(language="English"), get_localizer(language="Greek")
# Localize some text
>>> for msg in "dog parrot cat bear".split():
... print(e.localize(msg), g.localize(msg))
dog σκύλος
parrot parrot
cat γάτα
bear bear
"""
if __name__ == "__main__":
import doctest
doctest.testmod()
GreekLocalizer 와 EnglishLocalizer 는 get_localizer 함수에 의해 객체가 생성되고 있습니다.
팩토리가 즉, 여기서는 get_localizer 가 오로지 객체를 생성하는 일을 맡는 것입니다.