10. Фасад — Facade
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
10. Фасад — FacadeУявімо, що ви вирішили провести свої вихідні дуже активно, а тому приїхали на зимовий курорт покататися на лижах. Перед тим як кататися, добре було б пересвідчитися, що ввечері буде де заночувати. Тому ви йдете в місцевий готель і замовляєте собі кімнату, відповідну до ваших вимог. Треба мати на чому кататися, тому ви йдете взяти лижі на прокат. Для того, щоб їх підібрати, у вас запитують вашу вагу, рівень професіоналізму, потім ви підбираєте черевики і палки, для підбору яких у вас ще спитають ваш ріст і розмір взуття. Із цим усім на хребті ви йдете до каси і купуєте aбонемент на день. Не знаю як вас, але мене таке ходіння дістало б. Я б хотів якийсь термінал, у який вводиш потрібні дані, оплачуєш і тобі зразу персонал видає черевики, лижі, палки, абонемент на день і ключі до номеру в готелі (і дівчину у номер o_O). Якщо ж мені потрібен лише абонемент на день, а лижне спорядження я маю, то абонемент я купую на місці.
Фасад надає єдину «точку доступу» до підсистеми, тим самим спрощуючи її використання та розуміння. Уривок коду 10.1. Три системи, доступ до яких надається одним фасадом
// 1. Система орендування черевиків
class SkiRent
{
public int RentBoots(int feetSize, int skierLevel)
{
return 20;
}
public int RentSki(int weight, int skierLevel)
{
return 40;
}
public int RentPole(int height)
{
return 5;
}
}
// 2. Система придбання квитків
class SkiResortTicketSystem
{
public int BuyOneDayTicket()
{
return 115;
}
public int BuyHalfDayTicket()
{
return 60;
}
}
// 3. Система бронювання місць в готелі
class HotelBookingSystem
{
public int BookRoom(int roomQuality)
{
switch (roomQuality)
{
case 3:
return 250;
case 4:
return 500;
case 5:
return 900;
default:
throw new ArgumentException(
"roomQuality should be in range [3;5]");
}
}
}
// Фасад, що надає єдиний доступ до всіх систем згаданих вище
class SkiResortFacade
{
private SkiRent _skiRent = new SkiRent();
private SkiResortTicketSystem _skiResortTicketSystem
= new SkiResortTicketSystem();
private HotelBookingSystem _hotelBookingSystem = new HotelBookingSystem();
// Беручи до уваги вхідні параметри бронює номер, підбирає лижі і т.д
// Повертає загальну ціну за все
public int HaveGoodRest(int height, int weight, int feetSize, int skierLevel,
int roomQuality)
{
int skiPrice = _skiRent.RentSki(weight, skierLevel);
int skiBootsPrice = _skiRent.RentBoots(feetSize, skierLevel);
int polePrice = _skiRent.RentPole(height);
int oneDayTicketPr = _skiResortTicketSystem.BuyOneDayTicket();
int hotelPrice = _hotelBookingSystem.BookRoom(roomQuality);
return skiPrice + skiBootsPrice + polePrice + oneDayTicketPr + hotelPrice;
}
// Інші методи можуть поєднувати виклики до інших систем
public int HaveRestWithOwnSkis()
{
int oneDayTicketPrice = _skiResortTicketSystem.BuyOneDayTicket();
return oneDayTicketPrice;
}
// Може бути що наш фасад-термінал просто огортає методи із усіх систем
}
Цей дизайн патерн можна розглядати як наступний рівень такого важливого принципу як інкапсуляція. Просто на цьому рівні ми інкапсулюємо цілу підсистему. Великі системи зазвичай здійснюють взаємозв’язок одна з одною за допомогою цього патерну. Космічна станція у космосі стикається з іншою за допомогою одного механізму, а не прикрученням сотні дротів поокремо. Також добрим тоном буде, якщо кожна із збірок, які ви пишете, має свого роду Фасад із відкритих класів та інтерфейсів, щоб цю збірку потім можна було легко використовувати із інших частин програми.
По матеріалам книги Андрія Будая "Дизайн патерни – просто, як двері". Матеріал розміщується за домовленістю з автором.
Зверніть увагу на додаткові посиланняЯкщо вас цікавить...Головний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом Шаблони проектування програмного забезпечення (англ. software design patterns) — ефективні способи вирішення задач проектування програмного забезпечення. Шаблон не є закінченим зразком, який можна безпосередньо транслювати в програмний код. Об'єктно-орієнтований шаблон найчастіше є зразком вирішення проблеми і відображає відношення між класами та об'єктами, без вказівки на те, як буде зрештою реалізоване це відношення. |
Copyright © 2008—2024 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|