2011-03-09 32 views
145

फेकाडे एक कक्षा है जिसमें कई अन्य कक्षाएं हैं?फेकाडे डिजाइन पैटर्न क्या है?

यह एक डिजाइन पैटर्न बनाता है? मेरे लिए, यह एक सामान्य वर्ग की तरह है।

क्या आप मुझे यह फेकाडे पैटर्न समझा सकते हैं?

+4

प्रत्येक डिज़ाइन पैटर्न इसके कार्यान्वयन में कक्षाओं का एक गुच्छा है। –

+1

मुझे -1 वोट क्यों मिला ??? एक उचित सवाल या एक आसान सवाल नहीं ??? – kevin

+6

@axarydax - चूंकि मैं डिजाइन पैटर्न के लिए नया हूं, मुझे नहीं पता कि एक कठिन सवाल कैसे पूछना है। बाद में कोशिश करेंगे !!! – kevin

उत्तर

146

एक डिजाइन पैटर्न एक पुनरावर्ती समस्या को हल करने का एक आम तरीका है। सभी डिजाइन पैटर्न में कक्षाएं सामान्य कक्षाएं होती हैं। महत्वपूर्ण बात यह है कि वे कैसे संरचित होते हैं और किसी भी संभावित समस्या को हल करने के लिए वे एक साथ कैसे काम करते हैं।

फेकाडे डिज़ाइन पैटर्न इंटरफ़ेस को जटिल प्रणाली में सरल बनाता है; क्योंकि यह आमतौर पर उन सभी वर्गों से बना होता है जो जटिल प्रणाली के उपप्रणाली बनाते हैं।

एक फेकाडे उपयोगकर्ता को सिस्टम के जटिल विवरण से ढालता है और उन्हें प्रदान करता है जो easy to use है। यह decouples वह कोड है जो उपप्रणाली के विवरण से सिस्टम का उपयोग करता है, जिससे बाद में सिस्टम को संशोधित करना आसान हो जाता है।

http://www.dofactory.com/Patterns/PatternFacade.aspx

http://www.blackwasp.co.uk/Facade.aspx

इसके अलावा, क्या डिजाइन पैटर्न सीखने जबकि महत्वपूर्ण है पहचान करने के लिए जो पैटर्न अपने भी समस्या से फिट बैठता है और फिर इसे का उपयोग कर उचित रूप से सक्षम होने के लिए है। एक पैटर्न का दुरुपयोग करना या किसी समस्या के लिए फिट करने की कोशिश करना एक बहुत ही आम बात है क्योंकि आप इसे जानते हैं। डिजाइन पैटर्न का उपयोग करते हुए सीखने के दौरान उन नुकसानों से अवगत रहें।

+3

@unmesh - हाँ, मुझे अभी भी पता नहीं है कि किस परिदृश्य में उन डिजाइन पैटर्न का उपयोग करना है। – kevin

+0

@ केविन - एकमात्र तरीका आप उनके बारे में अधिक पढ़ना और उनके साथ अनुभव बनाना है :) –

+7

@ केविन: उन्हें जानने का समय सबसे कठिन हिस्सा है। सिद्धांत रूप में, पैटर्न आसान हो सकते हैं, लेकिन आईएमओ वे अभ्यास में मुश्किल हैं। आप केवल यह अनुभव अनुभव कर सकते हैं, यानी। कोडिंग, कोडिंग, कोडिंग। –

6

मुखौटा पैटर्न एक सरल इंटरफ़ेस उत्पन्न करने के परिणामस्वरूप कई अन्य इंटरफेस का एक रैपर है।

डिजाइन पैटर्न उपयोगी हैं क्योंकि वे पुनरावर्ती समस्याओं को हल करते हैं और सामान्य रूप से कोड को सरल बनाते हैं। डेवलपर्स की एक टीम में जो समान पैटर्न का उपयोग करने के लिए सहमत हैं, यह एक-दूसरे के कोड को बनाए रखने पर दक्षता और समझ में सुधार करता है।

अधिक पैटर्न के बारे में पढ़ने की कोशिश:

फसाड पैटर्न: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1

या अधिक सामान्यतः: http://www.dofactory.com/Patterns/Patterns.aspx

+0

http://www.nileshgule.com/2012/07/facade-design-pattern.html मैंने होम लोन सत्यापन प्रक्रिया के उदाहरण के साथ फेकाडे डिजाइन पैटर्न का वर्णन करने की कोशिश की । –

10

एक मुखौटा एक वर्ग जो अन्य वर्गों की एक बहुत कुछ शामिल के रूप में वर्णित नहीं किया जाना चाहिए। यह वास्तव में इस वर्ग के लिए एक इंटरफ़ेस है और कक्षाओं का उपयोग आसान बनाना चाहिए अन्यथा मुखौटा वर्ग बेकार है।

31

जैसा कि पिछले उत्तर में बताया गया है, यह उपभोक्ता ग्राहक को एक सरल इंटरफ़ेस प्रदान करता है। उदाहरण के लिए: "ईएसपीएन देखें" इच्छित कार्य है। लेकिन इसमें कई कदम शामिल हैं जैसे:

  1. यदि आवश्यक हो तो टीवी पर स्विच करें;
  2. उपग्रह/केबल कार्य करने के लिए जांचें;
  3. यदि आवश्यक हो तो ईएसपीएन पर स्विच करें।

लेकिन मुखौटा इसे सरल बना देगा और क्लाइंट को "घड़ी ईएसपीएन" फ़ंक्शन प्रदान करेगा।

4

एक मुखौटा एक वर्ग है जो एक टूलकिट और एक पूर्ण अनुप्रयोग के बीच है जो पैकेज या उपप्रणाली में कक्षाओं के सरलीकृत उपयोग की पेशकश करता है। फेकाडे पैटर्न का इरादा एक इंटरफेस प्रदान करना है जो उपप्रणाली का उपयोग करना आसान बनाता है। - सी # में book डिजाइन पैटर्न से निकालें।

5

फ़ैकेड पैटर्न का एक अतिरिक्त उपयोग आपकी टीम के सीखने की वक्र को कम करने के लिए हो सकता है। मुझे आपको एक उदाहरण दें:

आइए मान लें कि आपके एप्लिकेशन को एक्सेल द्वारा प्रदान किए गए COM ऑब्जेक्ट मॉडल का उपयोग करके एमएस एक्सेल के साथ बातचीत करने की आवश्यकता है। आपके टीम के सदस्यों में से एक सभी एक्सेल एपीआई जानता है और वह इसके शीर्ष पर एक फेकाडे बनाता है, जो आवेदन के सभी बुनियादी परिदृश्यों को पूरा करता है। टीम के किसी भी अन्य सदस्य को एक्सेल एपीआई सीखने पर समय बिताने की जरूरत नहीं है। टीम परिदृश्य को पूरा करने में शामिल आंतरिक या सभी एमएस एक्सेल वस्तुओं को जानने के बिना मुखौटा का उपयोग कर सकती है। यह बहुत अच्छा नहीं है?

इस प्रकार, यह एक जटिल उप-प्रणाली के शीर्ष पर एक सरलीकृत और एकीकृत इंटरफ़ेस प्रदान करता है।

3

मुखौटा का एक और उदाहरण: कहें कि आपका एप्लिकेशन डेटाबेस से कनेक्ट होता है और यूआई पर परिणाम प्रदर्शित करता है। आप अपने एप्लिकेशन को कॉन्फ़िगर करने योग्य बनाने के लिए मुखौटा का उपयोग कर सकते हैं, जैसे डेटाबेस या नकली वस्तुओं के साथ चलने में। तो आप मुखौटा वर्ग में सभी डेटाबेस कॉल करेंगे, जहां यह ऐप कॉन्फ़िगरेशन पढ़ेगा और डीबी क्वेरी को आग लगाने या मॉक ऑब्जेक्ट को वापस करने का फैसला करेगा। डीबी अनुपलब्ध होने पर इस तरह से आवेदन डीबी स्वतंत्र हो जाता है।

6

एक मुखौटा सरलीकृत कार्यों को उजागर करता है जिन्हें ज्यादातर कहा जाता है और कार्यान्वयन जटिलता को छुपाता है जिसे ग्राहकों को अन्यथा निपटना होगा। आम तौर पर कार्यान्वयन में कई पैकेज, कक्षाएं और कार्य का उपयोग किया जाता है। अच्छी तरह लिखित मुखौटे अन्य वर्गों की दुर्लभ पहुंच को दुर्लभ बनाते हैं। उदाहरण के लिए जब मैं एटीएम पर जाता हूं और कुछ राशि वापस लेता हूं। एटीएम छुपाता है कि यह सीधे स्वामित्व वाले बैंक के पास जा रहा है या यह बाहरी बैंक के लिए एक वार्ता नेटवर्क पर जा रहा है। एटीएम कई उपकरणों और उप-प्रणालियों का उपभोग करने वाले मुखौटे की तरह कार्य करता है कि एक ग्राहक के रूप में मुझे सीधे निपटने की ज़रूरत नहीं है।

67

Wikipedia में फेकाडे पैटर्न का एक बड़ा उदाहरण है।

/* 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(); 
    } 
} 
+4

यह एक अच्छा उदाहरण है। एक ग्राहक को एक मुखौटा में सभी चरणों को एकसाथ टुकड़ा करने में सक्षम होना चाहिए यदि वे भी चुनते हैं, निजी तरीकों से कुछ छुपाया जाना चाहिए। – Rob

+1

इमो यह एक अच्छा उदाहरण नहीं है क्योंकि यह उपयोग के मामले पर जोर नहीं देता है। उदाहरण के अनुसार, एक नियमित वर्ग के रूप में, उदाहरण दिखाता है। हार्डवेयर के साथ संबंध एक रचना है। शायद विकी पर उदाहरण के लिए ओवरकिल हो सकता है, लेकिन submodules instanciating के बजाय निर्भरता इंजेक्शन का उपयोग इरादे पर जोर दिया जाएगा और संभवतः TO के भ्रम से बचें। – ManuelSchneid3r

27

फेकाडे सिस्टम की जटिलताओं को छुपाता है और क्लाइंट को एक इंटरफ़ेस प्रदान करता है जहां से ग्राहक सिस्टम तक पहुंच सकता है।

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"); 
     } 
    } 
+0

क्या यह सब सिस्टम को 'ऑर्डरफैक्ड' के माध्यम से बिना किसी दूसरे के साथ संवाद करने की अनुमति है? आपके उदाहरण में, 'भुगतान' और' सूची 'के बीच? – Isuru

2

सभी डिज़ाइन पैटर्न कुछ कक्षाओं में व्यवस्थित होते हैं या अन्य जो एक विशिष्ट अनुप्रयोग के अनुरूप होते हैं। मुखौटा पैटर्न का उद्देश्य एक ऑपरेशन या संचालन की जटिलता को छिपाना है। आप एक उदाहरण देख सकते हैं और http://preciselyconcise.com/design_patterns/facade.php

1

मूल रूप से एकल खिड़की निकासी प्रणाली है। आप किसी भी काम को असाइन करते हैं जो किसी अन्य वर्ग में विशेष विधि को सौंपेगा।

3

एक डिज़ाइन पैटर्न सॉफ़्टवेयर डिज़ाइन में किसी दिए गए संदर्भ में सामान्य रूप से होने वाली समस्या का सामान्य पुन: प्रयोज्य समाधान है।

फेकाडे डिजाइन पैटर्न एक संरचनात्मक पैटर्न है क्योंकि यह कक्षाओं या संस्थाओं के बीच संबंध बनाने के तरीके को परिभाषित करता है। मुखौटा डिजाइन पैटर्न का उपयोग एक जटिल इंटरफ़ेस को एक जटिल जटिल इंटरफ़ेस में परिभाषित करने के लिए किया जाता है।

मुखौटा पैटर्न आदर्श है जब बड़ी संख्या में परस्पर निर्भर वर्गों के साथ काम करते हैं, या कक्षाओं के साथ जो कई तरीकों के उपयोग की आवश्यकता होती है, खासकर जब वे उपयोग करने के लिए जटिल होते हैं या समझने में मुश्किल होते हैं। मुखौटा वर्ग एक "रैपर" है जिसमें सदस्यों का एक समूह होता है जो आसानी से समझने और उपयोग करने में आसान होते हैं। ये सदस्य कार्यान्वयन विवरण छिपाते हुए मुखौटा उपयोगकर्ता की ओर से उपप्रणाली तक पहुंचते हैं।

मुखौटा डिज़ाइन पैटर्न विशेष रूप से उपयोगी होता है जब खराब रूप से डिज़ाइन किए गए उपप्रणाली को लपेटते हैं लेकिन इन्हें पुन: सक्रिय नहीं किया जा सकता है क्योंकि स्रोत कोड अनुपलब्ध है या मौजूदा इंटरफ़ेस का व्यापक रूप से उपयोग किया जाता है। कभी-कभी आप विभिन्न उद्देश्यों के लिए कार्यक्षमता के सबसेट प्रदान करने के लिए एक से अधिक मुखौटा लागू करने का निर्णय ले सकते हैं।

मुखौटा पैटर्न का एक उदाहरण उपयोग एक व्यावसायिक अनुप्रयोग के साथ एक वेब साइट को एकीकृत करने के लिए है। मौजूदा सॉफ़्टवेयर में बड़ी मात्रा में व्यावसायिक तर्क शामिल हो सकते हैं जिसे किसी विशेष तरीके से एक्सेस किया जाना चाहिए। वेबसाइट को इस व्यापार तर्क के लिए केवल सीमित पहुंच की आवश्यकता हो सकती है। उदाहरण के लिए, वेबसाइट को यह दिखाने की आवश्यकता हो सकती है कि बिक्री के लिए एक वस्तु सीमित स्तर के स्टॉक तक पहुंच गई है या नहीं। मुखौटा वर्ग की IsLowStock विधि यह इंगित करने के लिए एक बूलियन मान वापस कर सकता है। दृश्यों के पीछे, यह विधि मौजूदा भौतिक स्टॉक, आने वाले स्टॉक, आवंटित वस्तुओं और प्रत्येक आइटम के लिए कम स्टॉक स्तर को संसाधित करने की जटिलताओं को छुपा सकती है।

2

आपके प्रश्नों के संबंध में की सबसे अच्छा विवरण:

है फसाड एक वर्ग जो अन्य वर्गों की एक बहुत कुछ शामिल?

हां। यह आवेदन में कई उप-प्रणालियों के लिए एक रैपर है।

यह एक डिजाइन पैटर्न बनाता है? मेरे लिए, यह एक सामान्य वर्ग

सभी डिज़ाइन पैटर्न भी सामान्य कक्षाएं हैं। @अनमेश कोंडोलिकर सही ढंग से इस प्रश्न का उत्तर दिया।

क्या आप मुझे इस फेकाडे के बारे में समझा सकते हैं, मैं डिजाइन पैटर्न के लिए नया हूं।

एक उपतंत्र में इंटरफेस का एक सेट करने के लिए एक एकीकृत इंटरफेस प्रदान करें:

GOF के अनुसार, फसाड डिज़ाइन पैटर्न defind के रूप में है।

  1. एक सरल अंतरफलक एक जटिल प्रणाली का उपयोग करने की जरूरत है: फसाड पैटर्न एक उच्च स्तरीय इंटरफेस सबसिस्टम आसान उपयोग करने के लिए जब

    Facade पैटर्न आम तौर पर प्रयोग किया जाता है बनाता है कि परिभाषित करता है।

  2. उपप्रणाली के अवशोषण और कार्यान्वयन कसकर युग्मित हैं।
  3. स्तरित सॉफ़्टवेयर के प्रत्येक स्तर पर एक प्रविष्टि बिंदु की आवश्यकता है।
  4. सिस्टम बहुत जटिल या समझने में मुश्किल है।

चलो क्लीयर्रिप वेबसाइट का वास्तविक शब्द उदाहरण लें।

इस वेबसाइट बुक करने के लिए

  1. उड़ानों
  2. होटल
  3. उड़ानों + होटल

कोड विकल्प प्रदान करता है स्निपेट:

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){ 

    } 
} 

स्पष्टीकरण: TravelFacade

  • TravelFacade नीचे दिए गए विकल्पों में से एक

    Flight Booking 
    Train Booking 
    Hotel Booking 
    Flight + Hotel booking 
    Train + Hotel booking 
    
  • पुस्तक बुक करने के लिए एक सरल अंतरफलक प्रदान करता है:

    1. FlightBooking, TrainBooking and HotelBooking बड़े प्रणाली के विभिन्न उप-प्रणालियों रहे हैं TravelFacade से एपीआई आंतरिक रूप से उप-सिस्टम

      0 के एपीआई के नीचे कॉल करता है
      flightBooking.bookFlight 
      trainBooking.bookTrain(info); 
      hotelBooking.bookHotel(info); 
      
    2. इस प्रकार, TravelFacade सब-सिस्टम एपीआई को उजागर करने के साथ सरल और आसान एपीआई प्रदान करता है।

    में महत्वपूर्ण परिणाम:

    1. फसाड पैटर्न अधिक एक सहायक क्लाइंट अनुप्रयोग के लिए
    2. फसाड पैटर्न किसी में लागू किया जा सकता की तरह है (journaldev लेख से पंकज कुमार द्वारा) विकास बिंदु, आमतौर पर जब इंटरफेस की संख्या बढ़ती है और सिस्टम पूर्ण हो जाता है x
    3. सबसिस्टम इंटरफेस फसाड की जानकारी नहीं है और वे फसाड इंटरफेस के किसी भी संदर्भ नहीं होना चाहिए
    4. फसाड पैटर्न इंटरफेस के समान प्रकार के लिए लागू किया जाना चाहिए, इसका उद्देश्य एक प्रदान करना है कई इंटरफ़ेस की बजाय एकल इंटरफ़ेस

    बेहतर समझने के लिए sourcemaking आलेख भी देखें।

  • 3

    फेकाडे एक इंटरफ़ेस ऑब्जेक्ट के भीतर एक जटिल उपप्रणाली को समाहित करने पर चर्चा करता है। इससे उपप्रणाली का सफलतापूर्वक लाभ उठाने के लिए आवश्यक सीखने की वक्र कम हो जाती है। यह अपने संभावित ग्राहकों से उपप्रणाली को कम करने का भी बढ़ावा देता है।दूसरी तरफ, यदि फेकाडे उपप्रणाली के लिए एकमात्र पहुंच बिंदु है, तो यह उन सुविधाओं और लचीलापन को सीमित करेगा जो "पावर उपयोगकर्ताओं" की आवश्यकता हो सकती है।

    1

    फेकाडे डिजाइन पैटर्न स्ट्रक्चरल डिज़ाइन पैटर्न के अंतर्गत आता है। संक्षेप में फेकाडे का मतलब बाहरी उपस्थिति है। इसका मतलब है फेकाडे डिज़ाइन पैटर्न में हम कुछ छुपाते हैं और केवल वही दिखाते हैं जो वास्तव में क्लाइंट की आवश्यकता होती है। नीचे ब्लॉग पर और पढ़ें: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html

    1

    मुखौटा पैटर्न उपप्रणाली इंटरफ़ेस समूह में एक एकीकृत इंटरफ़ेस प्रदान करता है। मुखौटा एक उच्च स्तरीय इंटरफ़ेस को परिभाषित करता है, जो सबसिस्टम के साथ काम को सरल बनाता है।

    संबंधित मुद्दे