수색…


실제 세계 외관 (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 예제

외관 은 구조적 디자인 패턴입니다. 대형 시스템의 복잡성을 숨기고 클라이언트에 대한 간단한 인터페이스를 제공합니다.

클라이언트Facade 만 사용하며 하위 시스템의 상호 의존성에 대해 걱정하지 않습니다.

Gang of Four 도서에서 정의 :

서브 시스템의 인터페이스 세트에 통일 된 인터페이스를 제공하십시오. 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. TravelFacade의 책 API는 내부적으로 하위 시스템의 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