क्या मुखौटा एक वर्ग है जिसमें अन्य वर्गों का एक बहुत कुछ है?
क्या यह एक डिजाइन पैटर्न बनाता है? मेरे लिए, यह एक सामान्य वर्ग की तरह है।
क्या आप मुझे यह मुखौटा पैटर्न समझा सकते हैं ?
क्या मुखौटा एक वर्ग है जिसमें अन्य वर्गों का एक बहुत कुछ है?
क्या यह एक डिजाइन पैटर्न बनाता है? मेरे लिए, यह एक सामान्य वर्ग की तरह है।
क्या आप मुझे यह मुखौटा पैटर्न समझा सकते हैं ?
जवाबों:
एक डिज़ाइन पैटर्न आवर्ती समस्या को हल करने का एक सामान्य तरीका है। सभी डिज़ाइन पैटर्न में कक्षाएं सामान्य वर्ग हैं। जो महत्वपूर्ण है वह यह है कि उन्हें कैसे संरचित किया जाता है और कैसे वे किसी संभव समस्या को हल करने के लिए मिलकर काम करते हैं।
फसाड डिजाइन पैटर्न एक जटिल प्रणाली के लिए इंटरफ़ेस को सरल; क्योंकि यह आम तौर पर उन सभी वर्गों से बना होता है जो जटिल प्रणाली के उपतंत्र बनाते हैं।
एक मुखौटा प्रणाली के जटिल विवरण से उपयोगकर्ता को ढालता है और उन्हें इसमें से एक प्रदान करता simplified view
है जो है easy to use
। यह decouples
कोड भी है जो सिस्टम को सबसिस्टम के विवरण से उपयोग करता है, जिससे बाद में सिस्टम को संशोधित करना आसान हो जाता है।
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
इसके अलावा, डिज़ाइन पैटर्न सीखते समय क्या महत्वपूर्ण है, यह पहचानने में सक्षम होना है कि कौन सा पैटर्न आपकी दी गई समस्या को फिट करता है और फिर उचित रूप से इसका उपयोग करता है। किसी पैटर्न का दुरुपयोग करना या किसी समस्या के लिए उसे फिट करने की कोशिश करना बहुत ही आम बात है क्योंकि आप इसे जानते हैं। डिजाइन पैटर्न का उपयोग करते हुए सीखते समय उन नुकसानों से अवगत रहें।
विकिपीडिया में मुखौटा पैटर्न का एक बड़ा उदाहरण है।
/* Complex parts */
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) { ... }
}
class HardDrive {
public byte[] read(long lba, int size) { ... }
}
/* Facade */
class ComputerFacade {
private CPU processor;
private Memory ram;
private HardDrive hd;
public ComputerFacade() {
this.processor = new CPU();
this.ram = new Memory();
this.hd = new HardDrive();
}
public void start() {
processor.freeze();
ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
processor.jump(BOOT_ADDRESS);
processor.execute();
}
}
/* Client */
class You {
public static void main(String[] args) {
ComputerFacade computer = new ComputerFacade();
computer.start();
}
}
जैसा कि पिछले उत्तर में बताया गया है कि यह उपभोक्ता को एक सरल इंटरफ़ेस प्रदान करता है। उदाहरण के लिए: "घड़ी ईएसपीएन" इच्छित कार्य है। लेकिन इसमें कई चरण शामिल हैं जैसे:
लेकिन मुखौटा इसे सरल करेगा और ग्राहक को केवल "घड़ी ईएसपीएन" फ़ंक्शन प्रदान करेगा।
मुखौटा प्रणाली की जटिलताओं को छुपाता है और ग्राहक को एक इंटरफ़ेस प्रदान करता है जहां से ग्राहक सिस्टम तक पहुंच सकता है।
public class Inventory {
public String checkInventory(String OrderId) {
return "Inventory checked";
}
}
public class Payment {
public String deductPayment(String orderID) {
return "Payment deducted successfully";
}
}
public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();
public void placeOrder(String orderId) {
String step1 = inventry.checkInventory(orderId);
String step2 = pymt.deductPayment(orderId);
System.out
.println("Following steps completed:" + step1
+ " & " + step2);
}
}
public class Client {
public static void main(String args[]){
OrderFacade orderFacade = new OrderFacade();
orderFacade.placeOrder("OR123456");
System.out.println("Order processing completed");
}
}
OrderFacade
? आपके उदाहरण में, के बीच Payment
और Inventory
?
एक छोटी और सरल व्याख्या:
फ़ैकडे के साथ और उसके बिना परिदृश्य को समझने की कोशिश करें: यदि आप accout1 से खाता 2 में धनराशि स्थानांतरित करना चाहते हैं तो दो उपप्रणालियों को आमंत्रित किया जाना है, खाता 1 से वापस लें और खाता 2 में जमा करें।
आपके प्रश्नों के बारे में:
क्या एक वर्ग है जो अन्य वर्गों का एक बहुत कुछ शामिल है?
हाँ। यह आवेदन में कई उप-प्रणालियों के लिए एक आवरण है।
क्या यह एक डिजाइन पैटर्न बनाता है? मेरे लिए, यह एक सामान्य वर्ग की तरह है
सभी डिजाइन पैटर्न भी सामान्य वर्ग हैं। @ अनमेश कोंडोलिकर ने इस प्रश्न का सही उत्तर दिया।
क्या आप मुझे इस पहलू के बारे में समझा सकते हैं, मैं पैटर्न डिजाइन करने के लिए नया हूं।
GoF के अनुसार, मुखौटा डिजाइन पैटर्न इस प्रकार है:
एक सबसिस्टम में इंटरफेस के एक सेट को एकीकृत इंटरफ़ेस प्रदान करें। मुखौटा पैटर्न एक उच्च-स्तरीय इंटरफ़ेस को परिभाषित करता है जो सबसिस्टम का उपयोग करना आसान बनाता है
फसाड पैटर्न आम तौर पर जब प्रयोग किया जाता है:
चलो क्लियरट्रिप वेबसाइट का एक वास्तविक शब्द उदाहरण लेते हैं।
यह वेबसाइट बुक करने के लिए विकल्प प्रदान करती है
सांकेतिक टुकड़ा:
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
उप-सिस्टम एपीआई को उजागर करने के साथ सरल और आसान एपीआई प्रदान करता है।
मुख्य अंश: ( पंकज कुमार का लेखदेव लेख से )
बेहतर समझ के लिए सोर्समेकिंग लेख पर भी एक नज़र डालें ।
एक सरल इंटरफ़ेस का उत्पादन करने के लिए मुखौटा पैटर्न कई अन्य इंटरफेस का एक आवरण है।
डिज़ाइन पैटर्न उपयोगी होते हैं क्योंकि वे आवर्ती समस्याओं को हल करते हैं और सामान्य रूप से कोड को सरल करते हैं। डेवलपर्स की एक टीम में जो समान पैटर्न का उपयोग करने के लिए सहमत होते हैं, यह एक दूसरे के कोड को बनाए रखते समय दक्षता और समझ में सुधार करता है।
अधिक पैटर्न के बारे में पढ़ने की कोशिश करें:
मुखौटा पैटर्न: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
या अधिक आम तौर पर: http://www.dofactory.com/Patterns/Patterns.aspx
फ़ैकडे पैटर्न का एक अतिरिक्त उपयोग आपकी टीम के सीखने की अवस्था को कम करने के लिए हो सकता है। मैं आपको एक उदाहरण देता हूं:
आइए हम मान लें कि आपके एप्लिकेशन को एक्सेल द्वारा प्रदान की गई COM ऑब्जेक्ट मॉडल का उपयोग करके एमएस एक्सेल के साथ बातचीत करने की आवश्यकता है। आपकी टीम का एक सदस्य सभी एक्सेल एपीआई को जानता है और वह इसके शीर्ष पर एक मुखौटा बनाता है, जो आवेदन के सभी बुनियादी परिदृश्यों को पूरा करता है। टीम के किसी अन्य सदस्य को एक्सेल एपीआई सीखने में समय बिताने की जरूरत नहीं है। टीम किसी भी परिदृश्य को पूरा करने में शामिल आंतरिक या सभी एमएस एक्सेल वस्तुओं को जाने बिना मुखौटा का उपयोग कर सकती है। यह बहुत अच्छा नहीं है?
इस प्रकार, यह एक जटिल उप-प्रणाली के शीर्ष पर एक सरलीकृत और एकीकृत इंटरफ़ेस प्रदान करता है।
मुखौटा का एक और उदाहरण: कहते हैं कि आपका एप्लिकेशन डेटाबेस से कनेक्ट होता है और UI पर परिणाम प्रदर्शित करता है। आप डेटाबेस का उपयोग करके या नकली वस्तुओं के साथ चलाने के लिए, अपने एप्लिकेशन को कॉन्फ़िगर करने योग्य बनाने के लिए मुखौटा का उपयोग कर सकते हैं। तो आप सभी डेटाबेस कॉल को मुखौटा वर्ग में कर देंगे, जहां यह एप्लिकेशन कॉन्फिग को पढ़ेगा और डीबी क्वेरी को फायर करने या मॉक ऑब्जेक्ट को वापस करने का निर्णय करेगा। इस तरह आवेदन db में उपलब्ध नहीं होने के कारण स्वतंत्र हो जाता है।
एक मुखौटा सरल कार्यों को उजागर करता है जिन्हें ज्यादातर कहा जाता है और कार्यान्वयन उस जटिलता को छुपाता है जिससे ग्राहकों को अन्यथा निपटना होगा। सामान्य तौर पर कार्यान्वयन कई पैकेजों, कक्षाओं और फ़ंक्शन का उपयोग करता है। अच्छी तरह से लिखित facades अन्य वर्गों की सीधी पहुंच को दुर्लभ बनाते हैं। उदाहरण के लिए जब मैं एटीएम पर जाता हूं और कुछ राशि निकालता हूं। एटीएम छुपाता है कि क्या वह सीधे स्वामित्व वाले बैंक में जा रहा है या क्या वह किसी बाहरी बैंक के लिए बातचीत के नेटवर्क पर जा रहा है। एटीएम कई उपकरणों और उप-प्रणालियों का उपभोग करने वाले एक मुखौटे की तरह काम करता है जो एक ग्राहक के रूप में मुझे सीधे निपटने की आवश्यकता नहीं है।
पैटर्न का एक बहुत अच्छा वास्तविक जीवन उदाहरण है - कार स्टार्टर इंजन ।
ड्राइवरों के रूप में, हम बस चाबी चालू करते हैं और कार चालू हो जाती है। यथासंभव सरल। पर्दे के पीछे, कई अन्य कार सिस्टम शामिल हैं (बैटरी, इंजन, ईंधन, आदि के रूप में), ताकि कार सफलतापूर्वक शुरू हो सके, लेकिन वे स्टार्टर के पीछे छिपे हुए हैं।
जैसा कि आप देख सकते हैं, कार स्टार्टर, फसेड है। यह अन्य सभी कार प्रणालियों की जटिलता के बारे में चिंता किए बिना, इंटरफ़ेस का उपयोग करना आसान बनाता है।
आइए संक्षेप:
मुखौटा पैटर्न बड़े कोड ब्लॉक या एपीआई की जटिलता को सरल और छुपाता है, जो एक क्लीनर, समझने और उपयोग में आसान इंटरफ़ेस प्रदान करता है।
एक मुखौटा एक कार्यक्षमता के स्तर के साथ एक वर्ग है जो एक पैकेज या सबसिस्टम में कक्षाओं के सरलीकृत उपयोग की पेशकश करते हुए, टूलकिट और एक पूर्ण अनुप्रयोग के बीच स्थित है। मुखौटा पैटर्न का आशय एक ऐसे इंटरफ़ेस को प्रदान करना है जो सबसिस्टम का उपयोग करना आसान बनाता है। - C # में पुस्तक डिजाइन पैटर्न से निकालें ।
मुखौटा एक इंटरफेस इंटरफेस के भीतर एक जटिल सबसिस्टम encapsulating चर्चा करता है। यह सबसिस्टम का सफलतापूर्वक लाभ उठाने के लिए आवश्यक सीखने की अवस्था को कम करता है। यह अपने संभावित कई ग्राहकों से सबसिस्टम को डिकूप करने का भी वादा करता है। दूसरी ओर, अगर मुखौटा सबसिस्टम के लिए एकमात्र एक्सेस प्वाइंट है, तो यह उन विशेषताओं और लचीलेपन को सीमित कर देगा, जिनकी "पावर उपयोगकर्ताओं" को आवश्यकता हो सकती है।
एक सॉफ्टवेयर पैटर्न सॉफ्टवेयर डिजाइन में दिए गए संदर्भ के भीतर आमतौर पर होने वाली समस्या के लिए एक सामान्य पुन: प्रयोज्य समाधान है।
मुखौटा डिजाइन पैटर्न एक संरचनात्मक पैटर्न है क्योंकि यह कक्षाओं या संस्थाओं के बीच संबंध बनाने के लिए एक तरीके को परिभाषित करता है। मुखौटा डिज़ाइन पैटर्न का उपयोग सरलीकृत इंटरफ़ेस को अधिक जटिल सबसिस्टम में परिभाषित करने के लिए किया जाता है।
बड़ी संख्या में अन्योन्याश्रित वर्गों के साथ काम करते समय, या कई तरीकों के उपयोग की आवश्यकता वाले वर्गों के साथ, खासकर जब वे जटिल होते हैं, जिन्हें समझना मुश्किल होता है। मुखौटा वर्ग एक "आवरण" है जिसमें सदस्यों का एक सेट होता है जो आसानी से समझ में आता है और उपयोग करने में सरल होता है। ये सदस्य कार्यान्वयन विवरण को छिपाते हुए, निरस्त उपयोगकर्ता की ओर से सबसिस्टम तक पहुँचते हैं।
विशेष रूप से डिज़ाइन किए गए सबसिस्टम को रैप करते समय मुखौटा डिज़ाइन पैटर्न विशेष रूप से उपयोगी है लेकिन स्रोत कोड अनुपलब्ध है या मौजूदा इंटरफ़ेस व्यापक रूप से उपयोग किए जाने के कारण इसे फिर से तैयार नहीं किया जा सकता है। कभी-कभी आप विभिन्न उद्देश्यों के लिए कार्यक्षमता के सबसेट प्रदान करने के लिए एक से अधिक पहलुओं को लागू करने का निर्णय ले सकते हैं।
मुखौटा पद्धति का एक उदाहरण एक व्यावसायिक अनुप्रयोग के साथ एक वेब साइट को एकीकृत करने के लिए है। मौजूदा सॉफ़्टवेयर में बड़ी मात्रा में व्यावसायिक तर्क शामिल हो सकते हैं जिन्हें एक विशेष तरीके से एक्सेस किया जाना चाहिए। वेब साइट को इस व्यावसायिक तर्क तक केवल सीमित पहुंच की आवश्यकता हो सकती है। उदाहरण के लिए, वेब साइट को यह दिखाने की आवश्यकता हो सकती है कि बिक्री के लिए कोई आइटम सीमित स्तर के स्टॉक तक पहुंच गया है या नहीं। मुखौटा वर्ग की IsLowStock विधि यह इंगित करने के लिए बूलियन मान लौटा सकती है। पर्दे के पीछे, यह विधि वर्तमान भौतिक स्टॉक, आने वाले स्टॉक, आवंटित वस्तुओं और प्रत्येक आइटम के लिए निम्न स्टॉक स्तर को संसाधित करने की जटिलताओं को छिपा सकती है।
सभी डिज़ाइन पैटर्न कुछ वर्गों में किसी न किसी तरह से व्यवस्थित होते हैं जो एक विशिष्ट अनुप्रयोग के अनुकूल होते हैं। मुखौटा पैटर्न का उद्देश्य किसी ऑपरेशन या संचालन की जटिलता को छिपाना है। आप एक उदाहरण देख सकते हैं और http://precivelyconcise.com/design_patterns/facade.pp से मुखौटा पैटर्न सीख सकते हैं
इसके बस एक आवरण बनाने के लिए कई तरीकों को बुलाओ। आपके पास ए (एक्स) और वाई () और बी क्लास में विधि के (ए और जेड) के साथ ए वर्ग है। आप एक बार में x, y, z को कॉल करना चाहते हैं, यह करने के लिए कि फसेड पैटर्न का उपयोग करके आप बस एक फेकड क्लास बनाते हैं और एक विधि बनाते हैं जिससे xyz () कह सकते हैं। प्रत्येक विधि (x, y और z) को व्यक्तिगत रूप से कॉल करने के बजाय आप केवल मुखौटा विधि के आवरण विधि (xyz ()) को कॉल करते हैं जो उन विधियों को कहते हैं।
समान पैटर्न रिपॉजिटरी है, लेकिन यह मुख्य रूप से डेटा एक्सेस लेयर के लिए है।
मुखौटा डिजाइन पैटर्न संरचनात्मक डिजाइन पैटर्न के अंतर्गत आता है। संक्षेप में, बाहरी रूप का मतलब है। इसका मतलब यह है कि फेकडे डिज़ाइन पैटर्न में हम कुछ छिपाते हैं और केवल वही दिखाते हैं जो वास्तव में क्लाइंट की आवश्यकता होती है। नीचे ब्लॉग पर और अधिक पढ़ें: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdot.html
मुखौटा पैटर्न सबसिस्टम इंटरफ़ेस समूह को एक एकीकृत इंटरफ़ेस प्रदान करता है। मुखौटा एक उच्च-स्तरीय इंटरफ़ेस को परिभाषित करता है, जो सबसिस्टम के साथ काम को सरल करता है।