Як Abstract Factory сприяє слабкій зв'язності компонентів?
Abstract Factory сприяє слабкій зв'язності компонентів, тому що повністю ізолює клієнтський код від конкретних класів, з якими він працює.
1. Відокремлення клієнта від конкретних реалізацій
Клієнт знає лише абстрактний інтерфейс фабрики (GUIFactory), а не конкретні класи (WinFactory, MacFactory).
Він звертається до фабрики через спільний інтерфейс:
GUIFactory factory = new MacFactory();
Button button = factory.createButton();Клієнт не знає і не переймається, який саме об'єкт буде створено - WindowsButton чи MacButton. Це знижує залежність між компонентами.
2. Залежність від абстракцій, а не від реалізацій
Код взаємодіє з інтерфейсами продуктів (Button, Checkbox), а не з їхніми конкретними реалізаціями.
Якщо замінити MacFactory на WinFactory, система продовжить працювати без змін.
3. Гнучка заміна сімейств продуктів
Можна підмінити одне сімейство продуктів іншим, просто передавши нову фабрику, без переписування логіки. Це досягається завдяки інверсії залежностей (Dependency Inversion Principle): високорівневий код залежить від абстракцій, а не від деталей.
4. Локалізація змін
Якщо потрібно змінити реалізацію продукту (наприклад, як малюється кнопка), це стосується лише конкретної фабрики і продукту. Клієнтський код залишається незмінним - його зв'язність із фабриками мінімальна.
Висновок: Abstract Factory створює прошарок абстракцій між клієнтом і реалізаціями, завдяки чому код стає незалежним, легко розширюваним і менш схильним до каскадних змін.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.