2012-08-06 12 views
10

का उपयोग कर Effective Java से JDBC की तरह सेवा प्रदाता ढांचे के पीछे की अवधारणा को समझना (आइटम 1: पर विचार करें कंस्ट्रक्टर्स के बजाय स्थिर कारखाने विधि):कारखाने विधि

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

मुझे विशेष रूप से समझ में नहीं आता कि पुस्तक क्यों कह रही है कि एक स्थिर फैक्ट्री विधि द्वारा लौटाई गई वस्तु का वर्ग उस विधि में मौजूद नहीं है जब विधि युक्त वर्ग लिखा गया हो? क्या कोई उदाहरण के रूप में जेडीबीसी का उपयोग कर समझा सकता है।

+0

यह लिंक देखें: https://docs.oracle.com/javase/tutorial/ext/basics/spi.html – Malav

उत्तर

27

निम्नलिखित की तरह कुछ पर विचार करें:

public interface MyService { 
    void doSomething(); 
} 

public class MyServiceFactory { 
    public static MyService getService() { 
    try { 
     (MyService) Class.forName(System.getProperty("MyServiceImplemetation")).newInstance(); 
    } catch (Throwable t) { 
     throw new Error(t); 
    } 
    } 
} 
इस कोड के साथ

, अपने पुस्तकालय सेवा के कार्यान्वयन के बारे में पता करने की जरूरत नहीं है। आपकी लाइब्रेरी के उपयोगकर्ताओं को उस सिस्टम प्रॉपर्टी को सेट करना होगा जिसमें कार्यान्वयन का नाम शामिल है जिसे वे उपयोग करना चाहते हैं।

यही वह वाक्य है जिसका अर्थ आप समझ में नहीं आता है: कारखाना विधि कुछ वर्ग का एक उदाहरण लौटाएगी (जिसका नाम सिस्टम प्रॉपर्टी "MyServiceIplementation" में संग्रहीत है), लेकिन यह बिल्कुल नहीं जानता कि कक्षा यह है। यह सब जानता है कि यह MyService लागू करता है और इसमें एक सार्वजनिक, नो-एर्ग कन्स्ट्रक्टर होना चाहिए (अन्यथा, उपरोक्त कारखाना Error फेंक देगा)।

+0

+1: समस्या को हल करने का शानदार और सरल तरीका। –

1

प्रणाली उन्हें कार्यान्वयन

बस सरल तरीके से डाल करने के लिए आप संकलन समय पर इन JDBC विक्रेताओं के किसी भी निर्भरता नहीं जोड़ते से decoupling, कार्यान्वयन अपने ग्राहकों को उपलब्ध कराता है। ग्राहक क्रम

पर अपने स्वयं के जोड़ सकते हैं
संबंधित मुद्दे