[디자인 패턴] Abstract Factory 패턴

정태경·2023년 10월 9일
0
post-thumbnail

Abstract Factory 패턴

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()
profile
두나무 업비트 QA 엔지니어

0개의 댓글