CodeGym/Java Course/मॉड्यूल 3/स्ट्रक्चरल नमुने

स्ट्रक्चरल नमुने

उपलब्ध

2.1 अडॅप्टर

अॅडॉप्टर (अ‍ॅडॉप्टर) हा एक स्ट्रक्चरल डिझाइन पॅटर्न आहे जो एखाद्या ऑब्जेक्टच्या फंक्शन्सचा वापर आयोजित करण्यासाठी डिझाइन केला आहे जो विशेषतः तयार केलेल्या इंटरफेसद्वारे बदलासाठी उपलब्ध नाही.

अधिकृत व्याख्या थोडी अवघड आहे, परंतु जर तुम्ही ती तुमच्या स्वतःच्या शब्दात मांडली तर, अडॅप्टर हा एक डिझाइन पॅटर्न आहे जो विसंगत इंटरफेस असलेल्या वस्तूंना एकत्र काम करण्यास अनुमती देतो .

अडॅप्टर नमुना

विशेष तयार केलेल्या इंटरफेसद्वारे बदलासाठी उपलब्ध नसलेल्या ऑब्जेक्टच्या फंक्शन्सचा वापर आयोजित करण्यासाठी वापरला जातो . एक अतिरिक्त वर्ग तयार केला जातो ज्यामध्ये आवश्यक इंटरफेस असतो आणि हा वर्ग इच्छित ऑब्जेक्टच्या पद्धती कॉल करतो (ज्यामध्ये आवश्यक इंटरफेस नाही).

महत्वाचे! जर कोडमध्ये तुम्ही वर्गासाठी प्रत्यय Adapter भेटत असाल, तर हा वर्ग अॅडॉप्टर म्हणून कार्य करतो आणि वर वर्णन केलेल्या योजनेनुसार कार्य करणार्‍या वर्गांच्या गटाशी संबंधित आहे याचा विचार करण्याचा तुम्हाला पूर्ण अधिकार आहे.

हे अशा प्रकरणांमध्ये वापरले जाते जेथे सिस्टम आवश्यक डेटा आणि वर्तनाचे समर्थन करते, परंतु अयोग्य इंटरफेस आहे. अॅडॉप्टर पॅटर्नचा सर्वात सामान्य वापर म्हणजे जेव्हा तुम्हाला एखादा वर्ग तयार करायचा असतो जो नवीन किंवा विद्यमान अमूर्त वर्गाकडून वारसा मिळतो.

सामर्थ्य:

  • इतर बाह्य वर्ग वापरण्याच्या संक्रमणासाठी सिस्टम स्वतःच पुन्हा कार्य करण्याची आवश्यकता नाही, आणखी एक अॅडॉप्टर वर्ग लागू करणे पुरेसे आहे.
  • बाह्य वर्गांच्या अंमलबजावणीपासून स्वातंत्र्य (ग्रंथालयांचे वर्ग ज्यांचे कोड आपण बदलू शकत नाही). तुमचा प्रोग्राम बाह्य वर्गांच्या इंटरफेसपासून स्वतंत्र होतो.

२.२ सजावट करणारे

डेकोरेटर हा ऑब्जेक्टला अतिरिक्त वर्तन डायनॅमिकपणे जोडण्यासाठी स्ट्रक्चरल डिझाइन पॅटर्न आहे. डेकोरेटर पॅटर्न कार्यक्षमता वाढवण्यासाठी सबक्लासिंगच्या सरावासाठी एक चांगला आणि लवचिक पर्याय प्रदान करतो.

डेकोरेटर नमुना

ऑब्जेक्टशी अतिरिक्त दायित्वे डायनॅमिकपणे कनेक्ट करण्यासाठी वापरले जाते .

तुमच्यापैकी बरेच जण विचारतील: तुम्ही डायनॅमिकली (प्रोग्राम चालू असताना) ऑब्जेक्टमध्ये नवीन वर्तन कसे जोडू शकता? एखादी वस्तू तुकड्यांमधून, म्हणजे लहान वस्तूंपासून एकत्र केली जाऊ शकते. सर्व्हलेट्समधील फिल्टर चेन लक्षात ठेवा? किंवा जेव्हा तुम्ही फिल्टर(), नकाशा(), सूची() वापरून क्वेरी लिहिली तेव्हा प्रवाह API?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

डेकोरेटर पॅटर्नची ताकद:

  • ऑब्जेक्टची कार्यक्षमता वाढवण्यासाठी उपवर्ग तयार करण्याची गरज नाही.
  • नवीन कार्यक्षमता कुठेही डायनॅमिकली कनेक्ट करण्याची क्षमता: ConcreteComponent ऑब्जेक्टच्या मुख्य कार्यक्षमतेपूर्वी किंवा नंतर.

२.३ प्रॉक्सी

प्रॉक्सी हा एक स्ट्रक्चरल डिझाइन पॅटर्न आहे जो एक ऑब्जेक्ट प्रदान करतो जो दुसर्‍या ऑब्जेक्टवर प्रवेश नियंत्रित करतो, त्याच्या सर्व कॉल्समध्ये इंटरसेप्टिंग आणि पास करतो.

उप (प्रॉक्सी)

प्रॉक्सी पॅटर्न वास्तविक ऑब्जेक्टच्या जागी पर्यायी ऑब्जेक्ट प्रदान करतो. हे ऑब्जेक्ट मूळ ऑब्जेक्टवर प्रवेश नियंत्रित करते. खूप वेळा वापरले.

लक्षात ठेवा आम्ही Mockito फ्रेमवर्क कसे वापरले आणि Mockito.spy() पद्धत किंवा @Spy भाष्य वापरून वास्तविक ऑब्जेक्टवर कॉल कसा रोखला? त्यानंतरच एक विशेष प्रॉक्सी ऑब्जेक्ट तयार केला गेला, ज्याद्वारे मूळ ऑब्जेक्टवर सर्व कॉल पास झाले.

आणि मग आम्ही ऑब्जेक्टमध्ये नियम जोडून हे कॉल व्यवस्थापित करू शकतो. ते बरोबर आहे - मूळ ऑब्जेक्ट बदलत नाही आणि त्यासह कार्य करणे अधिक लवचिक होते. जेव्हा आम्ही आमच्या कोडवरून प्रॉक्सी ऑब्जेक्ट कॉल करत नाही, परंतु ते कुठेतरी पास करतो तेव्हा हे विशेषतः उपयुक्त आहे. अशा प्रकारे आपल्यापासून स्वतंत्र असलेल्या दोन वस्तूंचा संवाद नियंत्रित करतो.

उद्देशानुसार प्रॉक्सीचे प्रकार :

  • लॉगिंग प्रॉक्सी : सर्व कॉल त्यांच्या पॅरामीटर्ससह "विषय" ला लॉग करते.
  • रिमोट प्रॉक्सी (रिमोट प्रॉक्सी): वेगळ्या अॅड्रेस स्पेसमध्ये किंवा रिमोट मशीनवर असलेल्या "विषय" सह संप्रेषण प्रदान करते. विनंती आणि त्याचे युक्तिवाद एन्कोड करण्यासाठी आणि वास्तविक "विषय" वर एन्कोड केलेली विनंती पाठवण्यासाठी देखील ते जबाबदार असू शकते.
  • व्हर्च्युअल प्रॉक्सी (आभासी प्रॉक्सी): खरा "विषय" जेव्हा खरोखर आवश्यक असेल तेव्हाच तयार केला जातो याची खात्री करते. ते त्याच्या निर्मितीला विलंब करण्यासाठी वास्तविक "विषय" बद्दल काही माहिती कॅश देखील करू शकते.
  • कॉपी-ऑन-राइट : क्लायंट काही क्रिया करतो तेव्हा "विषय" ची एक प्रत प्रदान करते ("व्हर्च्युअल प्रॉक्सी" चे विशेष प्रकरण).
  • संरक्षण प्रॉक्सी : कॉलरकडे विनंती करण्यासाठी आवश्यक परवानग्या आहेत का ते तपासू शकतात.
  • कॅशिंग प्रॉक्सी : निकाल शेअर करू शकणार्‍या एकाधिक क्लायंटना सर्व्ह करण्यापूर्वी गणना परिणामांचे तात्पुरते संचयन प्रदान करते.
  • स्क्रीनिंग प्रॉक्सी: धोकादायक क्लायंटपासून (किंवा उलट) "विषय" चे संरक्षण करते.
  • सिंक्रोनाइझेशन प्रॉक्सी : असिंक्रोनस मल्टी-थ्रेडेड वातावरणात "विषय" वर समक्रमित प्रवेश नियंत्रण करते.
  • "स्मार्ट" लिंक (स्मार्ट संदर्भ प्रॉक्सी): जेव्हा "विषय" ची लिंक तयार केली जाते तेव्हा अतिरिक्त क्रिया करते, उदाहरणार्थ, "विषय" च्या सक्रिय लिंक्सची संख्या मोजते.

2.4 पूल

ब्रिज पॅटर्न हा एक स्ट्रक्चरल डिझाईन पॅटर्न आहे ज्याचा वापर "अमूर्तता आणि अंमलबजावणी वेगळे करण्यासाठी केला जातो जेणेकरून ते स्वतंत्रपणे बदलू शकतील."

ब्रिज पॅटर्न एन्कॅप्स्युलेशन, एग्रीगेशन वापरतो आणि वर्गांमध्ये जबाबदारी सामायिक करण्यासाठी वारसा वापरू शकतो.

ब्रिज

जेव्हा अमूर्तता आणि अंमलबजावणी विभक्त केली जाते, तेव्हा ते स्वतंत्रपणे बदलू शकतात. दुसऱ्या शब्दांत, ब्रिज पॅटर्नद्वारे अंमलात आणताना, इंटरफेसची रचना बदलल्याने अंमलबजावणीची रचना बदलण्यात व्यत्यय येत नाही.

आकृती म्हणून अशा अमूर्ततेचा विचार करा. अनेक प्रकारचे आकार आहेत, प्रत्येकाचे स्वतःचे गुणधर्म आणि पद्धती आहेत. तथापि, असे काहीतरी आहे जे सर्व आकृत्यांना एकत्र करते. उदाहरणार्थ, प्रत्येक आकार स्वतःला, स्केल इत्यादी काढण्यास सक्षम असणे आवश्यक आहे.

त्याच वेळी, ओएस किंवा ग्राफिक्स लायब्ररीच्या प्रकारानुसार रेखाचित्र ग्राफिक्स भिन्न असू शकतात. आकार विविध ग्राफिक्स वातावरणात स्वतःला रेखाटण्यास सक्षम असावेत. परंतु प्रत्येक आकृतीमध्ये सर्व रेखाचित्र पद्धती अंमलात आणणे किंवा प्रत्येक वेळी रेखाचित्र पद्धत बदलताना आकारात बदल करणे अव्यवहार्य आहे.

या प्रकरणात, ब्रिज पॅटर्न मदत करते, आपल्याला नवीन वर्ग तयार करण्यास अनुमती देते जे विविध ग्राफिकल वातावरणात रेखाचित्र अंमलात आणतील. या दृष्टिकोनाचा वापर करून, नवीन आकार आणि ते काढण्याचे मार्ग दोन्ही जोडणे खूप सोपे आहे.

आकृत्यांमधील बाणाद्वारे दर्शविलेल्या कनेक्शनचे 2 अर्थ असू शकतात: अ) “एक प्रकार”, लिस्कोव्ह प्रतिस्थापन तत्त्वानुसार, आणि ब) अमूर्ततेच्या संभाव्य अंमलबजावणींपैकी एक. भाषा सामान्यत: a) आणि b) दोन्ही अंमलात आणण्यासाठी अनुवांशिकतेचा वापर करतात, जे वर्ग पदानुक्रमांना फुगवतात.

या समस्येचे निराकरण करण्यासाठी हा पूल अचूकपणे कार्य करतो: पदानुक्रम अ आणि पदानुक्रम बी च्या वर्गाच्या ऑब्जेक्टपासून जोड्यांमध्ये वस्तू तयार केल्या जातात, लिस्कोव्हच्या मते श्रेणी ए मध्ये वारसा आणि "अंमलबजावणी" या संकल्पनेसाठी "विविधता" चा अर्थ आहे . ऑफ अॅब्स्ट्रॅक्शन” ऑब्जेक्ट A पासून त्याच्या जोडलेल्या ऑब्जेक्ट B ची लिंक वापरली जाते.

2.5 दर्शनी भाग

दर्शनी पॅटर्न हा एक स्ट्रक्चरल डिझाईन पॅटर्न आहे जो सिस्टीममधील योग्य ऑब्जेक्ट्सकडे सोपवणाऱ्या एकाच ऑब्जेक्टवर सर्व संभाव्य बाह्य कॉल्स कमी करून सिस्टमची जटिलता लपवतो.

दर्शनी साचा

भिन्न अंमलबजावणी किंवा इंटरफेसच्या संचासह युनिफाइड इंटरफेस कसा प्रदान करायचा, उदाहरणार्थ, उपप्रणालीला, जर त्या उपप्रणालीला मजबूत जोडणी अवांछित असेल किंवा उपप्रणालीची अंमलबजावणी बदलू शकते?

सबसिस्टमसह परस्परसंवादाचा एक बिंदू परिभाषित करा - एक दर्शनी वस्तू जी उपप्रणालीसह एक सामान्य इंटरफेस प्रदान करते आणि त्यास त्याच्या घटकांशी संवाद साधण्याची जबाबदारी नियुक्त करा. दर्शनी भाग ही एक बाह्य वस्तू आहे जी उपप्रणाली सेवांसाठी एकल प्रवेश बिंदू प्रदान करते.

इतर उपप्रणाली घटकांची अंमलबजावणी खाजगी आहे आणि बाह्य घटकांना दृश्यमान नाही. दर्शनी वस्तू सबसिस्टमच्या अंमलबजावणीतील बदलांपासून संरक्षणाच्या दृष्टीने बदलांना प्रतिरोधक GRASP नमुना अंमलबजावणी प्रदान करते.

महत्वाचे! जेव्हा आपण ऑब्जेक्ट्सचा काही गट पूर्णपणे लपवू इच्छितो आणि त्यांच्याशी सर्व संवाद आमच्या ऑब्जेक्टद्वारे पार करू इच्छितो तेव्हा हा नमुना वापरला जातो. जर तुम्हाला वस्तूंच्या संप्रेषण प्रक्रियेवर काही नियंत्रण हवे असेल आणि ते लपवायचे नसेल तर प्रॉक्सी पॅटर्न वापरणे चांगले.

1
टास्क
मॉड्यूल 3,  पातळी 16धडा 1
लॉक केलेले
Through the Nail with a Microscope
task4101
1
टास्क
मॉड्यूल 3,  पातळी 16धडा 1
लॉक केलेले
Signature Recipe
task4102
1
टास्क
मॉड्यूल 3,  पातळी 16धडा 1
लॉक केलेले
Surprise, Anonymous!
task4103
1
टास्क
मॉड्यूल 3,  पातळी 16धडा 1
लॉक केलेले
Fantastic Creatures
task4104
1
टास्क
मॉड्यूल 3,  पातळी 16धडा 1
लॉक केलेले
Alchemy Library
task4105
टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत