Sobes.tech
Junior — Middle
62

Каким образом Абстрактная Фабрика определяет, какую конкретную реализацию использовать?

AI-дан жауап

sobes.tech AI

Абстрактная Фабрика определяет, какую конкретную реализацию использовать, обычно через создание набора связанных объектов без указания их конкретных классов. Это достигается за счёт того, что клиент работает с интерфейсами или абстрактными классами, а конкретная фабрика реализует эти интерфейсы и возвращает конкретные объекты.

Чаще всего выбор конкретной реализации происходит на этапе создания конкретной фабрики, например, через параметр конфигурации, условие или инъекцию зависимостей. Таким образом, клиентский код не меняется, а конкретная фабрика решает, какие классы создавать.

Пример на Python:

from abc import ABC, abstractmethod

class Button(ABC):
    @abstractmethod
    def paint(self):
        pass

class WinButton(Button):
    def paint(self):
        print("Рисуем кнопку Windows")

class MacButton(Button):
    def paint(self):
        print("Рисуем кнопку Mac")

class GUIFactory(ABC):
    @abstractmethod
    def create_button(self) -> Button:
        pass

class WinFactory(GUIFactory):
    def create_button(self) -> Button:
        return WinButton()

class MacFactory(GUIFactory):
    def create_button(self) -> Button:
        return MacButton()

# Выбор конкретной фабрики
config = "Windows"

if config == "Windows":
    factory = WinFactory()
else:
    factory = MacFactory()

button = factory.create_button()
button.paint()

Здесь выбор конкретной реализации происходит через условие, которое определяет, какую фабрику использовать.