Sobes.tech
Junior — Middle
54

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

Answer from 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()

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