Junior — Middle
56
Каким образом Абстрактная Фабрика определяет, какую конкретную реализацию использовать?
Ответ от нейросети
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()
Здесь выбор конкретной реализации происходит через условие, которое определяет, какую фабрику использовать.