Чи є фасад класом, який містить безліч інших класів?
Що це робить модель дизайну? Для мене це як звичайний клас.
Чи можете ви пояснити мені цю схему фасаду ?
Чи є фасад класом, який містить безліч інших класів?
Що це робить модель дизайну? Для мене це як звичайний клас.
Чи можете ви пояснити мені цю схему фасаду ?
Відповіді:
Шаблон дизайну - це поширений спосіб вирішення повторюваної проблеми. Заняття у всіх моделях дизайну - це просто звичайні класи. Важливим є те, як вони структуровані та як вони працюють разом, щоб вирішити дану проблему найкращим чином.
Фасад шаблон дизайну спрощує інтерфейс до складної системи; тому що він, як правило, складається з усіх класів, які складають підсистеми складної системи.
Фасад захищає користувача від складних деталей системи та надає їм simplified view
його easy to use
. Це також decouples
код, який використовує систему з деталей підсистем, що спрощує модифікацію системи пізніше.
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
Крім того, що важливо під час вивчення моделей дизайну - це вміти розпізнавати, який шаблон відповідає вашій задачі, а потім використовувати його належним чином. Дуже поширена справа зловживати шаблоном або намагатися пристосувати його до якоїсь проблеми лише тому, що ви це знаєте. Будьте в курсі цих підводних каменів під час навчання \ використання моделей дизайну.
У Вікіпедії є чудовий приклад фасадного малюнка.
/* Complex parts */
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) { ... }
}
class HardDrive {
public byte[] read(long lba, int size) { ... }
}
/* Facade */
class ComputerFacade {
private CPU processor;
private Memory ram;
private HardDrive hd;
public ComputerFacade() {
this.processor = new CPU();
this.ram = new Memory();
this.hd = new HardDrive();
}
public void start() {
processor.freeze();
ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
processor.jump(BOOT_ADDRESS);
processor.execute();
}
}
/* Client */
class You {
public static void main(String[] args) {
ComputerFacade computer = new ComputerFacade();
computer.start();
}
}
Як пояснено в попередній відповіді, він забезпечує простий інтерфейс для споживача. Наприклад: "watch ESPN" - призначена функція. Але це включає кілька кроків, таких як:
Але фасад спростить це і просто надасть клієнту функцію "спостерігати за ESPN".
Фасад приховує складності системи та забезпечує інтерфейс для клієнта, звідки клієнт може отримати доступ до системи.
public class Inventory {
public String checkInventory(String OrderId) {
return "Inventory checked";
}
}
public class Payment {
public String deductPayment(String orderID) {
return "Payment deducted successfully";
}
}
public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();
public void placeOrder(String orderId) {
String step1 = inventry.checkInventory(orderId);
String step2 = pymt.deductPayment(orderId);
System.out
.println("Following steps completed:" + step1
+ " & " + step2);
}
}
public class Client {
public static void main(String args[]){
OrderFacade orderFacade = new OrderFacade();
orderFacade.placeOrder("OR123456");
System.out.println("Order processing completed");
}
}
OrderFacade
? У вашому прикладі між Payment
і Inventory
?
Коротке і просте пояснення:
Спробуйте зрозуміти сценарій з фасадом і без нього.
Якщо ви хочете перевести гроші з акаунта1 на рахунок2, то дві підсистеми, на які слід звернутись, зніміть з рахунку1 і внесіть на рахунок2.
Щодо ваших запитів:
Чи є Фасад класом, який містить безліч інших класів?
Так. Це обгортка для багатьох підсистем у застосуванні.
Що це робить модель дизайну? Для мене це як звичайний клас
Усі шаблони дизайну теж є звичайними класами. @ Unmesh Kondolikar правильно відповів на цей запит.
Чи можете ви пояснити мені цей фасад, я новачок у дизайні моделей.
Відповідно до GoF, модель дизайну фасаду визначається як:
Забезпечте уніфікований інтерфейс до набору інтерфейсів у підсистемі. Фасадний малюнок визначає інтерфейс вищого рівня, що полегшує використання підсистеми
Фасад шаблон зазвичай використовується , коли:
Візьмемо реальний приклад слова веб-сайту cleartrip .
Цей веб-сайт пропонує варіанти бронювання
Фрагмент коду:
import java.util.*;
public class TravelFacade{
FlightBooking flightBooking;
TrainBooking trainBooking;
HotelBooking hotelBooking;
enum BookingType {
Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
};
public TravelFacade(){
flightBooking = new FlightBooking();
trainBooking = new TrainBooking();
hotelBooking = new HotelBooking();
}
public void book(BookingType type, BookingInfo info){
switch(type){
case Flight:
// book flight;
flightBooking.bookFlight(info);
return;
case Hotel:
// book hotel;
hotelBooking.bookHotel(info);
return;
case Train:
// book Train;
trainBooking.bookTrain(info);
return;
case Flight_And_Hotel:
// book Flight and Hotel
flightBooking.bookFlight(info);
hotelBooking.bookHotel(info);
return;
case Train_And_Hotel:
// book Train and Hotel
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
return;
}
}
}
class BookingInfo{
String source;
String destination;
Date fromDate;
Date toDate;
List<PersonInfo> list;
}
class PersonInfo{
String name;
int age;
Address address;
}
class Address{
}
class FlightBooking{
public FlightBooking(){
}
public void bookFlight(BookingInfo info){
}
}
class HotelBooking{
public HotelBooking(){
}
public void bookHotel(BookingInfo info){
}
}
class TrainBooking{
public TrainBooking(){
}
public void bookTrain(BookingInfo info){
}
}
Пояснення:
FlightBooking, TrainBooking and HotelBooking
це різні підсистеми великої системи: TravelFacade
TravelFacade
пропонує простий інтерфейс для замовлення одного з наведених нижче варіантів
Flight Booking
Train Booking
Hotel Booking
Flight + Hotel booking
Train + Hotel booking
API API від TravelFacade внутрішньо дзвонить нижче API підсистем
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
Таким чином, TravelFacade
надається простіший і простіший API без викриття API підсистеми.
Ключові вивезення : (зі статті журналу Pande Kumar )
Перегляньте також статтю про створення джерела для кращого розуміння.
Шаблон фасаду - це обгортка багатьох інших інтерфейсів, в результаті чого створюється більш простий інтерфейс.
Шаблони дизайну корисні, оскільки вони вирішують повторювані проблеми і взагалі спрощують код. У команді розробників, які погоджуються використовувати ті самі шаблони, це підвищує ефективність та розуміння при підтримці коду один одного.
Спробуйте прочитати більше моделей:
Шаблон фасаду: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
або загальніше: http://www.dofactory.com/Patterns/Patterns.aspx
Одним із додаткових застосувань моделі «Фасад» може бути зменшення кривої навчання вашої команди. Дозвольте навести приклад:
Припустимо, що ваша програма потребує взаємодії з MS Excel, використовуючи модель об'єкта COM, надану Excel. Один з членів вашої команди знає всі API Excel, і він створює поверх нього фасад, який виконує всі основні сценарії програми. Жодному іншому члену команди не потрібно витрачати час на вивчення Excel API. Команда може використовувати фасад, не знаючи внутрішніх або всіх об'єктів MS Excel, які беруть участь у виконанні сценарію. Хіба це не чудово?
Таким чином, він забезпечує спрощений та уніфікований інтерфейс поверх складної підсистеми.
Ще один приклад фасаду: скажімо, ваша програма підключається до бази даних та відображає результати в інтерфейсі. Ви можете використовувати фасад, щоб зробити програму настроюваною, як це виконується за допомогою бази даних або з макетними об'єктами. Таким чином, ви будете робити всі дзвінки до бази даних до класу фасадів, де він буде читати конфігурацію програми та вирішує запустити запит db або повернути макетний об’єкт. таким чином додаток стає незалежним у випадку, коли db недоступний.
Фасад відкриває спрощені функції, які в основному називаються, а реалізація приховує складність, з якою інакше доведеться стикатися з клієнтами. Взагалі реалізація використовує декілька пакетів, класів та функцій там. Добре написані фасади роблять прямий доступ до інших класів рідкісними. Наприклад, коли я відвідую банкомат і знімаю певну суму. Банкомат приховує, чи йде він прямо до банку, що належить йому, чи переходить через узгоджену мережу для зовнішнього банку. Банкомат діє як фасад, що споживає декілька пристроїв та підсистем, з якими мені не доводиться безпосередньо займатися як клієнт.
Є дуже хороший приклад реальної роботи - Автомобільний стартер .
Як водії, ми просто включаємо ключ і машина заводиться. Як можна простіше. За лаштунками бере участь багато інших автомобільних систем (як акумулятор, двигун, паливо тощо), щоб автомобіль запустився успішно, але вони приховані за стартером.
Як бачите, автомобільний стартер - це Фасад. Це дає нам простий у користуванні інтерфейс, не турбуючись про складність всіх інших автомобільних систем.
Підведемо підсумки:
Шаблон фасаду спрощує та приховує складність великих кодових блоків чи API, забезпечуючи більш чистий, зрозумілий та простий у користуванні інтерфейс.
Фасад - це клас з рівнем функціональності, який лежить між набором інструментів і повною програмою, що пропонує спрощене використання класів у пакеті або підсистемі. Метою моделі "Фасад" є створення інтерфейсу, який робить підсистему простою у використанні. - Витяг із шаблонів дизайну книги в C #.
Фасад обговорює інкапсуляцію складної підсистеми в межах одного інтерфейсного об'єкта. Це зменшує криву навчання, необхідну для успішного використання підсистеми. Він також сприяє від'єднанню підсистеми від потенційно багатьох клієнтів. З іншого боку, якщо Фасад є єдиною точкою доступу для підсистеми, це обмежить функції та гнучкість, які можуть знадобитися "енергокористувачам".
Шаблон дизайну є загальним для багаторазового вирішення поширеної проблеми в заданому контексті при розробці програмного забезпечення.
Шаблон оформлення фасаду є структурним малюнком, оскільки він визначає спосіб створення взаємозв'язків між класами або сутностями. Шаблон дизайну фасаду використовується для визначення спрощеного інтерфейсу до більш складної підсистеми.
Шаблон фасаду ідеально підходить для роботи з великою кількістю взаємозалежних класів або для класів, які потребують використання декількох методів, особливо коли вони складні у використанні або важкі для розуміння. Клас фасаду - це "обгортка", яка містить набір членів, які легко зрозуміти і прості у використанні. Ці учасники отримують доступ до підсистеми від імені користувача фасаду, приховуючи деталі реалізації.
Шаблон оформлення фасаду особливо корисний при обгортанні підсистем, які погано розроблені, але не можуть бути відновлені, оскільки вихідний код недоступний або існуючий інтерфейс широко використовується. Іноді ви можете вирішити реалізувати більше одного фасаду, щоб надати підмножини функціональності для різних цілей.
Одним із прикладів використання фасадної схеми є інтеграція веб-сайту з бізнес-додатком. Існуюче програмне забезпечення може включати велику кількість ділової логіки, до якої потрібно отримати доступ певним чином. Веб-сайт може вимагати лише обмеженого доступу до цієї бізнес-логіки. Наприклад, на веб-сайті може знадобитися показати, чи досяг товар для продажу обмеженого рівня запасів. Метод IsLowStock класу фасадів може повернути булеве значення для позначення цього. За лаштунками цього методу можна було приховати складності обробки поточного фізичного запасу, вхідних запасів, виділених предметів та низький рівень запасів для кожного товару.
Усі шаблони дизайну - це деякі класи, організовані так чи інакше, що відповідають конкретній програмі. Мета візерунка фасаду - приховати складність операції чи операцій. Ви можете побачити приклад та дізнатись шаблон фасаду на веб-сайті http://preciselyconcise.com/design_patterns/facade.php
Це просто створення обгортки для виклику декількох методів. У вас є клас A методом x () і y () і клас B з методами k () і z (). Ви хочете зателефонувати x, y, z одразу, щоб це зробити за допомогою шаблону Facade, ви просто створите клас Facade і створіть метод, який дозволяє сказати xyz (). Замість виклику кожного методу (x, y і z) окремо ви просто викликаєте метод обгортки (xyz ()) класу фасаду, який викликає ці методи.
Аналогічна схема є сховищем, але це переважно для рівня доступу до даних.
Шаблон дизайну фасаду підпадає під шаблон структурного дизайну. Коротше кажучи, Фасад означає зовнішній вигляд. Це означає, що в дизайні фасаду ми щось приховуємо і показуємо лише те, що насправді вимагає клієнт. Детальніше читайте в блозі нижче: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
Шаблон фасаду забезпечує єдиний інтерфейс для групи інтерфейсів підсистеми. Фасад визначає інтерфейс високого рівня, що спрощує роботу з підсистемою.