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");
}
}
जावा में मुखौटा उदाहरण
मुखौटा संरचनात्मक डिजाइन पैटर्न है। यह बड़ी प्रणाली की जटिलताओं को छुपाता है और क्लाइंट को एक सरल इंटरफ़ेस प्रदान करता है।
ग्राहक केवल मुखौटा का उपयोग करता है और यह उप-प्रणालियों की अंतर निर्भरता के बारे में चिंतित नहीं है।
गैंग ऑफ़ फोर बुक से परिभाषा:
एक सबसिस्टम में इंटरफेस के एक सेट को एकीकृत इंटरफ़ेस प्रदान करें। फ़ाकडे एक उच्च-स्तरीय इंटरफ़ेस को परिभाषित करता है जो सबसिस्टम का उपयोग करना आसान बनाता है
संरचना:
वास्तविक दुनिया उदाहरण:
कुछ ट्रैवल बुकिंग साइटों जैसे कि मेकमायट्रिप, क्लियरट्रिप के बारे में सोचें जो ट्रेन, फ्लाइट और होटल बुक करने के लिए सेवाएं प्रदान करती हैं।
सांकेतिक टुकड़ा:
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 से बुक एपीआई आंतरिक रूप से उप-सिस्टम के एपीआई से नीचे कॉल करता है
flightBooking.bookFlight trainBooking.bookTrain(info); hotelBooking.bookHotel(info);
इस तरह,
TravelFacade
उप-सिस्टम एपीआई को उजागर करने के साथ सरल और आसान एपीआई प्रदान करता है।
प्रयोज्यता और उपयोग के मामले (विकिपीडिया से):
- एक जटिल प्रणाली तक पहुंचने के लिए एक सरल इंटरफ़ेस आवश्यक है।
- एक सबसिस्टम के अमूर्त और कार्यान्वयन कसकर युग्मित हैं।
- स्तरित सॉफ्टवेयर के प्रत्येक स्तर के लिए एक प्रवेश बिंदु की आवश्यकता है।
- सिस्टम बहुत जटिल या समझने में मुश्किल है।