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()
Здесь выбор конкретной реализации происходит через условие, которое определяет, какую фабрику использовать.