Abstract Factory 패턴은 객체 생성에 대한 추상화된 인터페이스를 제공하여, 서로 관련성이 있는 객체들의 집합을 생성하는 패턴이다. 이 패턴은 어떤 객체를 생성할 것인지 결정하는 코드를 분리하여, 유연하고 확장성 있는 코드를 만들 수 있도록 도와준다.
팩토리 메서드 패턴과의 차이점은, 팩토리 메서드 패턴은 단일 객체를 생성하는 인터페이스를 제공하는 반면, Abstract Factory 패턴은 여러 종류의 객체를 생성하는 인터페이스를 제공한다.
from abc import ABC, abstractmethod
from enum import Enum
class BrowserEnum(Enum):
EdgeBrowser = 1
ChromeBrowser = 2
SafariBrowser = 3
FirefoxBrowser = 4
class Browser:
@abstractmethod
def open_browser(self):
pass
class EdgeBrowser(Browser):
def open_browser(self):
print("엣지 브라우저를 엽니다.")
class ChromeBrowser(Browser):
def open_browser(self):
print("크롬 브라우저를 엽니다.")
class SafariBrowser(Browser):
def open_browser(self):
print("사파리 브라우저를 엽니다.")
class FirefoxBrowser(Browser):
def open_browser(self):
print("파이어폭스 브라우저를 엽니다.")
class BrowserFactory:
@abstractmethod
def create_browser(self, browser_name):
pass
class ChromiumBrowserFactory(BrowserFactory):
def create_browser(self, browser_name):
if browser_name == BrowserEnum.ChromeBrowser:
return ChromeBrowser()
elif browser_name == BrowserEnum.EdgeBrowser:
return EdgeBrowser()
class GeckoBrowserFactory(BrowserFactory):
def create_browser(self, browser_name):
if browser_name == BrowserEnum.FirefoxBrowser:
return FirefoxBrowser()
class WebkitBrowserFactory(BrowserFactory):
def create_browser(self, browser_name):
if browser_name == BrowserEnum.SafariBrowser:
return SafariBrowser()
chrome_browser = ChromiumBrowserFactory().create_browser(BrowserEnum.ChromeBrowser)
chrome_browser.open_browser()
edge_browser = ChromiumBrowserFactory().create_browser(BrowserEnum.EdgeBrowser)
edge_browser.open_browser()