Design patterns
정면
수색…
실제 세계 외관 (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){
}
}
설명:
FlightBooking, TrainBooking and HotelBooking
은 대형 시스템의 다른 하위 시스템입니다 :TravelFacade
TravelFacade
는 아래의 옵션 중 하나를 예약 할 수있는 간단한 인터페이스를 제공합니다Flight Booking Train Booking Hotel Booking Flight + Hotel booking Train + Hotel booking
TravelFacade의 책 API는 내부적으로 하위 시스템의 API를 호출합니다.
flightBooking.bookFlight trainBooking.bookTrain(info); hotelBooking.bookHotel(info);
이러한 방식으로,
TravelFacade
는 서브 시스템 API를 노출하지 않고보다 간단하고 쉬운 API를 제공합니다.
적용 가능성 및 사용 사례 (위키 백과) :
- 복잡한 시스템에 액세스하려면 간단한 인터페이스가 필요합니다.
- 서브 시스템의 추상화 및 구현은 밀접하게 결합됩니다.
- 계층화 된 소프트웨어의 각 레벨에 진입 점이 필요합니다.
- 시스템은 매우 복잡하거나 이해하기 어렵습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow