Относительно ваших запросов:
Является ли 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 подсистем.
Ключевые выносы: (из journaldev статья Pankaj Kumar )
- Фасад больше похож на помощника для клиентских приложений
- Шаблон фасада можно применять в любой точке разработки, обычно , когда количество интерфейсов растет и система завершается x .
- Интерфейсы подсистем не знают о Фасаде, и у них не должно быть никаких ссылок на интерфейс Фасада
- Для фасадов аналогичного типа следует применять шаблон фасада , его цель - предоставить один интерфейс, а не несколько интерфейсов, выполняющих аналогичные виды работ
Взгляните на sourcemaking статья тоже для лучшего понимания.