Поиск…


Фасад реального мира (C #)

public class MyDataExporterToExcell
{
    public static void Main()
    {
        GetAndExportExcelFacade facade = new GetAndExportExcelFacade();

        facade.Execute();
    }
}

public class GetAndExportExcelFacade
{

    // All services below do something by themselves, determine location for data,
    // get the data, format the data, and export the data
    private readonly DetermineExportDatabaseService _determineExportData = new DetermineExportDatabaseService();
    private readonly GetRawDataToExportFromDbService _getRawData = new GetRawDataToExportFromDbService();
    private readonly TransformRawDataForExcelService _transformData = new TransformRawDataForExcelService();
    private readonly CreateExcelExportService _createExcel = new CreateExcelExportService();

    // the facade puts all the individual pieces together, as its single responsibility.
    public void Execute()
    {
        var dataLocationForExport = _determineExportData.GetDataLocation();
        var rawData = _getRawData.GetDataFromDb(dataLocationForExport);
        var transformedData = _transformData.TransformRawToExportableObject(rawData);
        _createExcel.GenerateExcel("myFilename.xlsx");
    }
}

Пример фасада в java

Фасад - это структурный дизайн. Он скрывает сложности большой системы и обеспечивает простой интерфейс для клиента.

Клиент использует только Facade, и он не беспокоится о взаимозависимости подсистем.

Определение из книги «Банда четырех»:

Обеспечьте унифицированный интерфейс для набора интерфейсов в подсистеме. Façade определяет интерфейс более высокого уровня, который упрощает использование подсистемы

Состав:

введите описание изображения здесь

Пример реального мира:

Подумайте о некоторых сайтах бронирования путешествий, таких как makemytrip, 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){
    
    }
}

Объяснение:

  1. FlightBooking, TrainBooking and HotelBooking - это разные подсистемы большой системы: TravelFacade

  2. TravelFacade предлагает простой интерфейс для бронирования одного из следующих вариантов

    Flight Booking
    Train Booking 
    Hotel Booking
    Flight + Hotel booking 
    Train + Hotel booking
    
  3. API книги от TravelFacade внутренне вызывает ниже API-интерфейсы подсистем

    flightBooking.bookFlight
    trainBooking.bookTrain(info);
    hotelBooking.bookHotel(info);
    
  4. Таким образом, TravelFacade обеспечивает более простой и легкий API без использования подсистемных API.

Применимость и варианты использования (из Википедии):

  1. Для доступа к сложной системе требуется простой интерфейс.
  2. Абстракции и реализации подсистемы тесно связаны.
  3. Нужна точка входа для каждого уровня многоуровневого программного обеспечения.
  4. Систему очень сложно понять.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow