추상화 팩토리 패턴(Abstract Factory Pattern)은 관련된 객체들을 그룹으로 묶어 일관된 방식으로 생성할 수 있도록 하는 디자인 패턴입니다. 여러 종류의 객체를 묶어서 생성할 때 유용하며, 객체의 구체적인 클래스가 아닌 추상적인 인터페이스에 의존하게 하여 유연성을 높입니다.
from abc import ABC, abstractmethod
# 1. Abstract Products 정의
class Button(ABC):
@abstractmethod
def click(self) -> str:
pass
class Checkbox(ABC):
@abstractmethod
def check(self) -> str:
pass
# 2. Concrete Products 정의
class MacButton(Button):
def click(self) -> str:
return "Clicking a Mac-styled Button"
class WindowsButton(Button):
def click(self) -> str:
return "Clicking a Windows-styled Button"
class MacCheckbox(Checkbox):
def check(self) -> str:
return "Checking a Mac-styled Checkbox"
class WindowsCheckbox(Checkbox):
def check(self) -> str:
return "Checking a Windows-styled Checkbox"
# 3. Abstract Factory 정의
class GUIFactory(ABC):
@abstractmethod
def create_button(self) -> Button:
pass
@abstractmethod
def create_checkbox(self) -> Checkbox:
pass
# 4. Concrete Factories 정의
class MacFactory(GUIFactory):
def create_button(self) -> Button:
return MacButton()
def create_checkbox(self) -> Checkbox:
return MacCheckbox()
class WindowsFactory(GUIFactory):
def create_button(self) -> Button:
return WindowsButton()
def create_checkbox(self) -> Checkbox:
return WindowsCheckbox()
# 5. Client 코드
def create_ui(factory: GUIFactory):
button = factory.create_button()
checkbox = factory.create_checkbox()
print(button.click())
print(checkbox.check())
# 팩토리 선택에 따라 Mac 또는 Windows 스타일의 UI 생성
if __name__ == "__main__":
os_type = "Mac" # 혹은 "Windows"
if os_type == "Mac":
factory = MacFactory()
elif os_type == "Windows":
factory = WindowsFactory()
else:
raise ValueError("Unknown OS type")
create_ui(factory)
# 출력 예시:
# Clicking a Mac-styled Button
# Checking a Mac-styled Checkbox