CodeGym /కోర్సులు /మాడ్యూల్ 3 /నిర్మాణ నమూనాలు

నిర్మాణ నమూనాలు

మాడ్యూల్ 3
స్థాయి , పాఠం
అందుబాటులో ఉంది

2.1 అడాప్టర్

అడాప్టర్ (అడాప్టర్) అనేది ప్రత్యేకంగా రూపొందించిన ఇంటర్‌ఫేస్ ద్వారా సవరణ కోసం అందుబాటులో లేని వస్తువు యొక్క ఫంక్షన్‌ల వినియోగాన్ని నిర్వహించడానికి రూపొందించిన నిర్మాణ నమూనా.

అధికారిక నిర్వచనం కొంచెం గమ్మత్తైనది, కానీ మీరు దానిని మీ స్వంత మాటలలో ఉంచినట్లయితే, అడాప్టర్ అనేది ఒక డిజైన్ నమూనా, ఇది అననుకూలమైన ఇంటర్‌ఫేస్‌లతో కూడిన వస్తువులను కలిసి పని చేయడానికి అనుమతిస్తుంది .

అడాప్టర్ నమూనా

ప్రత్యేకంగా సృష్టించబడిన ఇంటర్‌ఫేస్ ద్వారా సవరణకు అందుబాటులో లేని వస్తువు యొక్క ఫంక్షన్‌ల వినియోగాన్ని నిర్వహించడానికి ఉపయోగించబడుతుంది . అవసరమైన ఇంటర్‌ఫేస్‌ని కలిగి ఉన్న అదనపు తరగతి సృష్టించబడుతుంది మరియు ఈ తరగతి క్రమంగా కావలసిన వస్తువు యొక్క పద్ధతులను పిలుస్తుంది (దీనికి అవసరమైన ఇంటర్‌ఫేస్ లేదు).

ముఖ్యమైనది! కోడ్‌లో మీరు తరగతికి సంబంధించిన అడాప్టర్ ప్రత్యయాన్ని కలిసినట్లయితే, ఈ తరగతి అడాప్టర్‌గా పనిచేస్తుందని మరియు పైన వివరించిన స్కీమ్ ప్రకారం పని చేసే తరగతుల సమూహంతో అనుబంధించబడిందని పరిగణించడానికి మీకు పూర్తి హక్కు ఉంటుంది.

సిస్టమ్ అవసరమైన డేటా మరియు ప్రవర్తనకు మద్దతిచ్చే సందర్భాల్లో ఇది ఉపయోగించబడుతుంది , కానీ తగని ఇంటర్‌ఫేస్‌ను కలిగి ఉంటుంది. మీరు కొత్త లేదా ఇప్పటికే ఉన్న వియుక్త తరగతి నుండి వారసత్వంగా పొందే తరగతిని సృష్టించాలనుకున్నప్పుడు అడాప్టర్ నమూనా యొక్క అత్యంత సాధారణ ఉపయోగం.

బలాలు:

  • ఇతర బాహ్య తరగతులను ఉపయోగించుకునే పరివర్తనకు సిస్టమ్‌ను పునర్నిర్మించాల్సిన అవసరం లేదు, మరొక అడాప్టర్ తరగతిని అమలు చేయడానికి సరిపోతుంది.
  • బాహ్య తరగతుల అమలు నుండి స్వతంత్రం (మనం మార్చలేని లైబ్రరీల నుండి తరగతులు). మీ ప్రోగ్రామ్ బాహ్య తరగతుల ఇంటర్‌ఫేస్ నుండి స్వతంత్రంగా మారుతుంది.

2.2 డెకరేటర్లు

డెకరేటర్ అనేది ఒక వస్తువుకు అదనపు ప్రవర్తనను డైనమిక్‌గా జోడించడానికి నిర్మాణాత్మక డిజైన్ నమూనా. డెకరేటర్ నమూనా కార్యాచరణను విస్తరించడానికి సబ్‌క్లాసింగ్ అభ్యాసానికి మంచి మరియు సౌకర్యవంతమైన ప్రత్యామ్నాయాన్ని అందిస్తుంది.

డెకరేటర్ నమూనా

ఒక వస్తువుకు అదనపు బాధ్యతలను డైనమిక్‌గా కనెక్ట్ చేయడానికి ఉపయోగించబడుతుంది .

మీలో చాలా మంది అడుగుతారు: మీరు డైనమిక్‌గా (ప్రోగ్రామ్ నడుస్తున్నప్పుడు) ఒక వస్తువుకు కొత్త ప్రవర్తనను ఎలా జోడించగలరు? ఒక వస్తువును ముక్కలు నుండి, అంటే చిన్న వస్తువుల నుండి సమీకరించవచ్చు. సర్వ్‌లెట్‌లలో ఫిల్టర్ చైన్‌లు గుర్తున్నాయా? లేదా మీరు ఫిల్టర్(), మ్యాప్(), జాబితా()ని ఉపయోగించి ప్రశ్నను వ్రాసినప్పుడు Stream API?

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

డెకరేటర్ నమూనా యొక్క బలాలు:

  • వస్తువు యొక్క కార్యాచరణను విస్తరించడానికి సబ్‌క్లాస్‌లను సృష్టించాల్సిన అవసరం లేదు.
  • ఎక్కడైనా కొత్త కార్యాచరణను డైనమిక్‌గా కనెక్ట్ చేసే సామర్థ్యం: కాంక్రీట్ కాంపొనెంట్ ఆబ్జెక్ట్ యొక్క ప్రధాన కార్యాచరణకు ముందు లేదా తర్వాత.

2.3 ప్రాక్సీలు

ప్రాక్సీ అనేది నిర్మాణాత్మక డిజైన్ నమూనా, ఇది మరొక వస్తువుకు ప్రాప్యతను నియంత్రించే ఒక వస్తువును అందిస్తుంది, దాని అన్ని కాల్‌లను అడ్డగించడం మరియు పాస్ చేయడం.

డిప్యూటీ (ప్రాక్సీ)

ప్రాక్సీ నమూనా నిజమైన వస్తువు స్థానంలో ప్రత్యామ్నాయ వస్తువును అందిస్తుంది. ఈ వస్తువు అసలు వస్తువుకు యాక్సెస్‌ని నియంత్రిస్తుంది. చాలా తరచుగా ఉపయోగిస్తారు.

మేము Mockito ఫ్రేమ్‌వర్క్‌ను ఎలా ఉపయోగించాము మరియు Mockito.spy() పద్ధతి లేదా @Spy ఉల్లేఖనాన్ని ఉపయోగించి నిజమైన వస్తువుకు కాల్‌ను ఎలా అడ్డగించాము? ఆ సమయంలోనే ఒక ప్రత్యేక ప్రాక్సీ ఆబ్జెక్ట్ సృష్టించబడింది, దీని ద్వారా అసలు వస్తువుకు అన్ని కాల్‌లు పంపబడతాయి.

ఆపై మేము ఆబ్జెక్ట్‌కు నియమాలను జోడించడం ద్వారా ఈ కాల్‌లను నిర్వహించవచ్చు. అది నిజం - అసలు వస్తువు మారదు మరియు దానితో పనిచేయడం మరింత సరళంగా మారుతుంది. మేము మా కోడ్ నుండి ప్రాక్సీ ఆబ్జెక్ట్‌ని కాల్ చేయనప్పుడు ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది, కానీ దానిని ఎక్కడో పాస్ చేయండి. ఈ విధంగా మనతో సంబంధం లేకుండా రెండు వస్తువుల కమ్యూనికేషన్‌ను నియంత్రిస్తుంది.

ప్రయోజనం ప్రకారం ప్రాక్సీల రకాలు :

  • లాగింగ్ ప్రాక్సీ : అన్ని కాల్‌లను వాటి పారామితులతో “విషయం”కి లాగ్ చేస్తుంది.
  • రిమోట్ ప్రాక్సీ (రిమోట్ ప్రాక్సీలు): వేరే చిరునామా స్థలంలో లేదా రిమోట్ మెషీన్‌లో ఉన్న “విషయం”తో కమ్యూనికేషన్‌ను అందిస్తుంది. ఇది అభ్యర్థన మరియు దాని వాదనలను ఎన్‌కోడింగ్ చేయడానికి మరియు ఎన్‌కోడ్ చేసిన అభ్యర్థనను నిజమైన “సబ్జెక్ట్”కి పంపడానికి కూడా బాధ్యత వహించవచ్చు.
  • వర్చువల్ ప్రాక్సీ (వర్చువల్ ప్రాక్సీలు): నిజమైన "సబ్జెక్ట్" నిజంగా అవసరమైనప్పుడు మాత్రమే సృష్టించబడుతుందని నిర్ధారిస్తుంది. ఇది దాని సృష్టిని ఆలస్యం చేయడానికి నిజమైన "సబ్జెక్ట్" గురించిన కొంత సమాచారాన్ని కూడా కాష్ చేయగలదు.
  • కాపీ-ఆన్-రైట్ : క్లయింట్ నిర్దిష్ట చర్యలను ("వర్చువల్ ప్రాక్సీ" యొక్క ప్రత్యేక సందర్భం) చేసినప్పుడు "సబ్జెక్ట్" కాపీని అందిస్తుంది.
  • రక్షణ ప్రాక్సీలు : అభ్యర్థన చేయడానికి కాలర్‌కు అవసరమైన అనుమతులు ఉన్నాయో లేదో తనిఖీ చేయవచ్చు.
  • కాషింగ్ ప్రాక్సీ : ఫలితాలను పంచుకోగల బహుళ క్లయింట్‌లకు అందించడానికి ముందు గణన ఫలితాల యొక్క తాత్కాలిక నిల్వను అందిస్తుంది.
  • స్క్రీనింగ్ ప్రాక్సీ: ప్రమాదకరమైన క్లయింట్‌ల నుండి "సబ్జెక్ట్"ని రక్షిస్తుంది (లేదా వైస్ వెర్సా).
  • సమకాలీకరణ ప్రాక్సీ : అసమకాలిక బహుళ-థ్రెడ్ వాతావరణంలో “విషయం”కి సమకాలీకరించబడిన యాక్సెస్ నియంత్రణను నిర్వహిస్తుంది.
  • “స్మార్ట్” లింక్ (స్మార్ట్ రిఫరెన్స్ ప్రాక్సీ): “సబ్జెక్ట్”కి లింక్ సృష్టించబడినప్పుడు అదనపు చర్యలను చేస్తుంది, ఉదాహరణకు, “సబ్జెక్ట్”కి సక్రియ లింక్‌ల సంఖ్యను గణిస్తుంది.

2.4 వంతెన

బ్రిడ్జ్ నమూనా అనేది "అబ్‌స్ట్రాక్షన్ మరియు ఇంప్లిమెంటేషన్‌ను వేరు చేయడానికి, అవి స్వతంత్రంగా మారడానికి" ఉపయోగించే నిర్మాణ నమూనా.

వంతెన నమూనా ఎన్‌క్యాప్సులేషన్, అగ్రిగేషన్‌ను ఉపయోగిస్తుంది మరియు తరగతుల మధ్య బాధ్యతను పంచుకోవడానికి వారసత్వాన్ని ఉపయోగించవచ్చు.

వంతెన

సంగ్రహణ మరియు అమలు వేరు చేయబడినప్పుడు, అవి స్వతంత్రంగా మారవచ్చు. మరో మాటలో చెప్పాలంటే, వంతెన నమూనా ద్వారా అమలు చేయబడినప్పుడు, ఇంటర్‌ఫేస్ యొక్క నిర్మాణాన్ని మార్చడం అమలు యొక్క నిర్మాణాన్ని మార్చడంలో జోక్యం చేసుకోదు.

అటువంటి సంగ్రహణను ఒక వ్యక్తిగా పరిగణించండి. అనేక రకాల ఆకారాలు ఉన్నాయి, ప్రతి దాని స్వంత లక్షణాలు మరియు పద్ధతులు ఉన్నాయి. అయితే, అన్ని గణాంకాలను ఏకం చేసే విషయం ఉంది. ఉదాహరణకు, ప్రతి ఆకారాన్ని తప్పనిసరిగా డ్రా చేయగలగాలి, స్కేల్ మొదలైనవి.

అదే సమయంలో, OS లేదా గ్రాఫిక్స్ లైబ్రరీ రకాన్ని బట్టి డ్రాయింగ్ గ్రాఫిక్స్ భిన్నంగా ఉండవచ్చు. ఆకారాలు వివిధ గ్రాఫిక్స్ పరిసరాలలో తమను తాము చిత్రించగలగాలి. కానీ ప్రతి ఆకృతిలో అన్ని డ్రాయింగ్ పద్ధతులను అమలు చేయడం లేదా డ్రాయింగ్ పద్ధతి మారిన ప్రతిసారీ ఆకారాన్ని సవరించడం అసాధ్యమైనది.

ఈ సందర్భంలో, వంతెన నమూనా సహాయపడుతుంది, వివిధ గ్రాఫికల్ పరిసరాలలో డ్రాయింగ్‌ను అమలు చేసే కొత్త తరగతులను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ విధానాన్ని ఉపయోగించి, కొత్త ఆకారాలు మరియు వాటిని గీయడానికి మార్గాలు రెండింటినీ జోడించడం చాలా సులభం.

రేఖాచిత్రాలలోని బాణం ద్వారా సూచించబడిన కనెక్షన్ 2 అర్థాలను కలిగి ఉంటుంది: ఎ) "ఒక రకమైన", లిస్కోవ్ ప్రత్యామ్నాయ సూత్రానికి అనుగుణంగా, మరియు బి) సంగ్రహణ యొక్క సాధ్యమైన అమలులలో ఒకటి. భాషలు సాధారణంగా a) మరియు b రెండింటినీ అమలు చేయడానికి వారసత్వాన్ని ఉపయోగిస్తాయి), ఇది తరగతి సోపానక్రమాలను ఉబ్బిపోయేలా చేస్తుంది.

వంతెన ఖచ్చితంగా ఈ సమస్యను పరిష్కరించడానికి ఉపయోగపడుతుంది: వస్తువులు A మరియు సోపానక్రమం B యొక్క తరగతికి చెందిన వస్తువు నుండి జంటగా సృష్టించబడతాయి, A సోపానక్రమంలోని వారసత్వం లిస్కోవ్ ప్రకారం “వైవిధ్యం” మరియు “అమలు చేయడం” అనే భావన కోసం . సంగ్రహణ” వస్తువు A నుండి దాని జత చేసిన వస్తువు Bకి లింక్ ఉపయోగించబడుతుంది.

2.5 ముఖభాగం

ముఖభాగం నమూనా అనేది స్ట్రక్చరల్ డిజైన్ నమూనా, ఇది సిస్టమ్‌లోని సముచిత వస్తువులకు వాటిని అప్పగించే ఒకే వస్తువుకు సాధ్యమయ్యే అన్ని బాహ్య కాల్‌లను తగ్గించడం ద్వారా సిస్టమ్ యొక్క సంక్లిష్టతను దాచిపెడుతుంది.

ముఖభాగం టెంప్లేట్

అసమానమైన ఇంప్లిమెంటేషన్స్ లేదా ఇంటర్‌ఫేస్‌ల సెట్‌తో ఏకీకృత ఇంటర్‌ఫేస్‌ను ఎలా అందించాలి, ఉదాహరణకు, సబ్‌సిస్టమ్‌కు, ఆ సబ్‌సిస్టమ్‌కు బలమైన కలపడం అవాంఛనీయమైనట్లయితే లేదా సబ్‌సిస్టమ్ యొక్క అమలు మారవచ్చు?

సబ్‌సిస్టమ్‌తో పరస్పర చర్య యొక్క ఒక పాయింట్‌ను నిర్వచించండి - సబ్‌సిస్టమ్‌తో ఒక సాధారణ ఇంటర్‌ఫేస్‌ను అందించే ముఖభాగం వస్తువు, మరియు దాని భాగాలతో పరస్పర చర్య చేసే బాధ్యతను కేటాయించండి. ముఖభాగం అనేది సబ్‌సిస్టమ్ సేవలకు ఒకే ఎంట్రీ పాయింట్‌ను అందించే బాహ్య వస్తువు.

ఇతర సబ్‌సిస్టమ్ భాగాల అమలు ప్రైవేట్ మరియు బాహ్య భాగాలకు కనిపించదు. ముఖభాగం వస్తువు GRASP నమూనా యొక్క అమలును అందిస్తుంది, ఇది ఉపవ్యవస్థ అమలులో మార్పులకు వ్యతిరేకంగా రక్షణ పరంగా మార్పులకు నిరోధకతను కలిగి ఉంటుంది.

ముఖ్యమైనది! మేము కొన్ని వస్తువుల సమూహాన్ని పూర్తిగా దాచాలనుకున్నప్పుడు మరియు వాటితో మా వస్తువు ద్వారా అన్ని కమ్యూనికేషన్‌లను పాస్ చేయాలనుకున్నప్పుడు ఈ నమూనా ఉపయోగించబడుతుంది. మీరు వస్తువుల కమ్యూనికేషన్ ప్రక్రియపై కొంత నియంత్రణను అందించాలనుకుంటే మరియు వాటిని తప్పనిసరిగా దాచకూడదనుకుంటే, ప్రాక్సీ నమూనాను ఉపయోగించడం ఉత్తమం.

వ్యాఖ్యలు
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION