Является ли фасад классом, который содержит много других классов?
Что делает это шаблоном дизайна? Для меня это как нормальный класс.
Можете ли вы объяснить мне эту модель фасада ?
Является ли фасад классом, который содержит много других классов?
Что делает это шаблоном дизайна? Для меня это как нормальный класс.
Можете ли вы объяснить мне эту модель фасада ?
Ответы:
Шаблон проектирования является распространенным способом решения повторяющейся проблемы. Классы во всех шаблонах проектирования - это просто нормальные классы. Важно то, как они структурированы и как они работают вместе, чтобы решить данную проблему наилучшим образом.
Фасад шаблон дизайна упрощает интерфейс к сложной системе; потому что он обычно состоит из всех классов, которые составляют подсистемы сложной системы.
Фасад защищает пользователя от сложных деталей системы и предоставляет им 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();
}
}
Как объяснялось в предыдущем ответе, он предоставляет простой интерфейс для потребляющего клиента. Например: «смотреть 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
?
Краткое и простое объяснение:
Попытайтесь понять сценарий с
фасадом и без него: если вы хотите перевести деньги с accout1 на account2, то две подсистемы, которые нужно вызвать, это снять со счета1 и внести на счет2.
По поводу ваших запросов:
Является ли Facade классом, который содержит много других классов?
Да. Это оболочка для многих подсистем в приложении.
Что делает это шаблоном дизайна? Для меня это как нормальный класс
Все шаблоны проектирования тоже являются нормальными классами. @ 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 от TravelFacade внутренне вызывает ниже API подсистем
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
Таким образом, TravelFacade
обеспечивается более простой и легкий API без раскрытия API подсистем.
Основные выводы: (из статьи в журнале Pankaj Kumar )
Взгляните на статью по созданию источников, чтобы лучше понять.
Шаблон фасада является оберткой многих других интерфейсов, в результате чего получается более простой интерфейс.
Шаблоны проектирования полезны, поскольку они решают повторяющиеся проблемы и в целом упрощают код. В команде разработчиков, которые соглашаются использовать одни и те же шаблоны, это повышает эффективность и понимание при поддержке кода друг друга.
Попробуйте прочитать больше шаблонов:
Шаблон фасада: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
или в более общем плане: http://www.dofactory.com/Patterns/Patterns.aspx
Одним из дополнительных применений шаблона Façade может быть сокращение кривой обучения вашей команды. Позвольте мне привести Вам пример:
Предположим, что ваше приложение должно взаимодействовать с MS Excel, используя объектную модель COM, предоставленную Excel. Один из членов вашей команды знает все API-интерфейсы Excel и создает поверх него Фасад, который выполняет все основные сценарии приложения. Ни одному другому члену команды не нужно тратить время на изучение Excel API. Команда может использовать фасад, не зная внутренних органов или всех объектов MS Excel, участвующих в выполнении сценария. Разве это не здорово?
Таким образом, он обеспечивает упрощенный и унифицированный интерфейс поверх сложной подсистемы.
Другой пример фасада: допустим, ваше приложение подключается к базе данных и отображает результаты в пользовательском интерфейсе. Вы можете использовать фасад, чтобы сделать ваше приложение настраиваемым, например, при работе с базой данных или с фиктивными объектами. Таким образом, вы будете выполнять все вызовы базы данных для класса фасадов, где он будет читать конфигурацию приложения и решит запустить запрос db или вернуть фиктивный объект. таким образом, приложение становится независимым от базы данных в случае, если база данных недоступна.
Фасад предоставляет упрощенные функции, которые в основном вызываются, а реализация скрывает сложность, с которой в противном случае пришлось бы иметь дело клиентам. В общем, реализация использует несколько пакетов, классов и функций. Хорошо написанные фасады делают прямой доступ к другим классам редким. Например, когда я захожу в банкомат и снимаю некоторую сумму. Банкомат скрывает, идет ли он прямо в принадлежащий банку или он переходит через согласованную сеть для внешнего банка. Банкомат действует как фасад, потребляющий множество устройств и подсистем, с которыми мне как клиенту не приходится иметь дело напрямую.
Существует очень хороший реальный пример этой модели - автомобильный стартер .
Как водители, мы просто включаем ключ, и машина заводится. Как можно проще. За кулисами задействованы многие другие автомобильные системы (такие как аккумулятор, двигатель, топливо и т. Д.), Чтобы автомобиль успешно запускался, но они скрыты за стартером.
Как видите, стартер автомобиля - это Фасад. Это дает нам простой в использовании интерфейс, не беспокоясь о сложности всех других автомобильных систем.
Подведем итоги:
Шаблон Facade упрощает и скрывает сложность больших блоков кода или API, предоставляя более понятный, понятный и простой в использовании интерфейс.
Фасад - это класс с уровнем функциональности, который находится между инструментарием и законченным приложением, предлагая упрощенное использование классов в пакете или подсистеме. Цель шаблона Facade - предоставить интерфейс, который делает подсистему простой в использовании. - Извлечение из книги Design Patterns в 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
Шаблон фасада предоставляет унифицированный интерфейс к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, который упрощает работу с подсистемой.