Фасад (шаблон проектування)
Матеріал з Вікіпедії — вільної енциклопедії.
Зміни шаблонів/файлів цієї версії очікують на перевірку.
Стабільна версія була перевірена 31 березня 2013.
Фаса́д — шаблон проектування, призначений для об'єднання групи підсистем під один уніфікований інтерфейс, надаючи доступ до них через одну точку входу. Це дозволяє спростити роботу з підсистемами.
Фасад відноситься до структурних шаблонів проектування.
Зміст |
Складові шаблону [ред.]
Класи, з яких складається шаблон можна розділити на 3 частини:
- фасад;
- підсистеми;
- клієнти.
Ролі складових [ред.]
Фасад [ред.]
- Визначає певним підсистемам інтерфейс, отже знає кому адресувати запити;
- делегує запити клієнтів потрібним об'єктам підсистеми;
- створює нові методи, котрі об'єднують виклики об'єктів системи і\або додають свою логіку;
- приховує підсистеми;
- зменшує кількість параметрів методів, шляхом попередньої підстановки визначених значень.
Підсистема [ред.]
- реалізує функціонал, закритий та не видимий для зовнішніх компонентів
- виконує роботу, запитану клієнтом через фасад.
- не зберігає посилання на фасад - це означає що одна підсистема може мати довільну кількість фасадів.
Клієнт [ред.]
- здійснює запити фасаду;
- не знає про існування підсистем.
Випадки використання [ред.]
Фасад використовується у випадках, коли потрібно:
- спростити доступ до складної системи;
- створити рівні доступу до системи;
- додати стійкість до змін підсистем;
- зменшити кількість сильних зв'язків між клієнтом та підсистемою, але залишити доступ до повної функціональності.
Приклад C# [ред.]
using System; namespace FacadeExample { // Клас клієнта class Client { static void Main(string[] args) { //Створюємо єкземпляр фасаду - інтерфейс підсистем Facade facade = new Facade(); facade.CallPaired(); Console.WriteLine("\n\n"); facade.CallUnpaired(); Console.ReadKey(); } } // Клас фасаду class Facade { Subsystem1 first; Subsystem2 second; Subsystem3 third; Subsystem4 fourth; Subsystem5 fifth; public Facade() { this.first = new Subsystem1(); this.second = new Subsystem2(); this.third = new Subsystem3(); this.fourth = new Subsystem4(); this.fifth = new Subsystem5(); } //Виклик методів з підсистем Subsystem2 та Subsystem4 public void CallPaired() { Console.WriteLine("Результати роботи методів підсистем з парним індексом (2,4)\n"); second.Method(); fourth.Method(); } //Виклик методів з підсистем Subsystem1, Subsystem3 та Subsystem5 public void CallUnpaired() { Console.WriteLine("Результати роботи методів підсистем з непарним індексом (1,3,5)\n"); first.Method(); third.Method(); fifth.Method(); } } // Клас підсистеми class Subsystem1 { public void Method() { Console.WriteLine("Метод першої підсистеми"); } } // Клас підсистеми class Subsystem2 { public void Method() { Console.WriteLine("Метод другої підсистеми"); } } // Клас підсистеми class Subsystem3 { public void Method() { Console.WriteLine("Метод третьої підсистеми"); } } // Клас підсистеми class Subsystem4 { public void Method() { Console.WriteLine("Метод четвертої підсистеми"); } } // Клас підсистеми class Subsystem5 { public void Method() { Console.WriteLine("Метод п'ятої підсистеми"); } } }
Джерела [ред.]
|
||||||||||||||

