డిజైన్ సరళి బహిర్గతం: వ్యూహాత్మక సరళి



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

'

“డిజైన్ ప్యాటర్న్స్ ఎక్స్‌పోజ్డ్” సిరీస్ యొక్క మొదటి పోస్ట్‌కు స్వాగతం. ఈ శ్రేణిలో మేము ప్రతి డిజైన్ సరళిని మొదటి నుండి వెలికి తీయబోతున్నాము.





java ఒక ప్రోగ్రామ్ను ఎలా ముగించాలి

ప్రోగ్రామింగ్ భాష మరియు దాని నిర్మాణాలను తెలుసుకోవడం మిమ్మల్ని మంచి ప్రోగ్రామర్ లేదా డెవలపర్‌గా చేయదు. ఈ రోజు మరియు భవిష్యత్తులో పనిచేసే సాఫ్ట్‌వేర్‌ను రూపొందించడానికి డిజైన్ పద్ధతుల పరిజ్ఞానం అవసరం.

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



ప్రతి డిజైన్ సరళి ఒక నిర్దిష్ట రకమైన పరిస్థితిని పరిష్కరించడం కోసం ఒకటి కంటే ఎక్కువ డిజైన్ సరళిని ఉపయోగించగల పరిస్థితులు ఉండవచ్చు.

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

మంచి ప్రోగ్రామర్లు అవసరాలు వచ్చిన తర్వాత కోడింగ్ ప్రారంభించడానికి ఆతురుతలో లేరు. వారు కూర్చుని, వారి డిజైన్ పని చేస్తుందా అనే సమస్య గురించి ఆలోచిస్తారు. అవును అయితే, 6 నెలల తర్వాత ఇది పని చేస్తుందా, అవసరాలు ఎప్పుడు మారుతాయి.



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

సాఫ్ట్‌వేర్ పరిశ్రమలో స్థిరంగా ఉండేది ఒక్కటే మార్పు. అవసరాలు ఖచ్చితంగా మారుతూ ఉంటాయి. కాబట్టి మీ కోడ్ భవిష్యత్ అవసరాలకు సులభంగా స్వీకరించగల సాఫ్ట్‌వేర్‌ను మేము ఎలా డిజైన్ చేస్తాము? దాని కోసం మీరు ముందుగానే ప్రారంభించాలి మరియు భవిష్యత్ అవసరాలు మీ మునుపటి కోడ్‌ను విచ్ఛిన్నం చేయని విధంగా దీన్ని రూపొందించండి.

నేను అది ఎలా చెయ్యగలను?

సరే, ఆ సూత్రాల ఆధారంగా డిజైన్ సూత్రాలు మరియు డిజైన్ సరళిని అనుసరించడం ద్వారా చేయవచ్చు.

ఇప్పుడు, కోడింగ్‌లోకి ప్రవేశించి, మంచి ప్రోగ్రామర్‌గా మారడానికి ప్రయాణాన్ని ప్రారంభిద్దాం. ఈ పోస్ట్‌లో, మేము చాలా ముఖ్యమైన నమూనాను వెలికి తీయబోతున్నాము - స్ట్రాటజీ సరళి .

నేను చాలా ముఖ్యమైనది అని చెప్పినప్పుడు ఇది స్ట్రాటజీ సరళి ద్వారా పరిష్కరించబడే సాధారణ సమస్యను ప్రతిబింబిస్తుంది.

స్ట్రాటజీ సరళి అంటే ఏమిటి?

‘గ్యాంగ్ ఆఫ్ ఫోర్’ పుస్తకం నుండి నేరుగా నిర్వచనం ఇక్కడ ఉంది: “పరస్పరం మార్చుకోగలిగే అల్గోరిథంల కుటుంబాన్ని సృష్టించడానికి స్ట్రాటజీ సరళి ఉపయోగించబడుతుంది, దీని నుండి అవసరమైన ప్రక్రియను రన్-టైమ్‌లో ఎంచుకుంటారు”.

ఒకవేళ మీరుఅర్థం చేసుకోలేకపోతున్నాను, చింతించకండి, మేము దానిని a లో వివరించబోతున్నాముసరళమైనదిమార్గంమీరు కోసంఅర్థం చేసుకోండి.

మొదట సమస్యను అర్థం చేసుకుందాం, ఆపై స్ట్రాటజీ సరళి దాన్ని ఎలా పరిష్కరించగలదో చూద్దాం.

పై UML రేఖాచిత్రంలో, మనకు యానిమల్ నైరూప్య తరగతి మరియు రెండు కాంక్రీట్ తరగతులు ఉన్నాయి, డాగ్ మరియు బర్డ్, యానిమల్ సూపర్ క్లాస్ నుండి విస్తరించి ఉన్నాయి.

కాబట్టి జంతువుల నైరూప్య తరగతి మరియు డాగ్ మరియు బర్డ్ అనే రెండు కాంక్రీట్ తరగతులను నిర్వచించండి.

పై డిజైన్ గురించి మీరు ఏమనుకుంటున్నారు? మా డిజైన్‌లో ఒక పెద్ద తప్పు ఉంది.

అన్ని జంతువులు ఎగరలేవు, పై సందర్భంలో కుక్క ఎగరదు. కానీ ఇప్పటికీ దీనికి ‘ఫ్లై’ ప్రవర్తన ఉంది.

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

ఎగిరేది అన్ని జంతువులకు లేని సామర్ధ్యం అని మనం అర్థం చేసుకోవాలి. యానిమల్ నైరూప్య తరగతిలో ఫ్లై () పద్ధతిని అందించడం ద్వారా మేము అన్ని ఉప-తరగతులలో ఎగిరే సామర్థ్యాన్ని సెట్ చేసాము, ఇది అన్ని ఉప-తరగతుల జంతువులకు సరైనది కాదు.

ఉప తరగతుల్లో ఫ్లై పద్ధతిని అమలు చేయడంలో సమస్య ఏమిటని మీరు అనుకోవచ్చు. “నేను ఎగరలేను” అని ముద్రించడానికి ఫ్లయింగ్ కాని జంతు ఉప తరగతుల్లో మీరు ఫ్లై () పద్ధతిని అమలు చేయగలిగినప్పటికీ. కానీ సమస్య ఏమిటంటే, మీరు ఇప్పటికీ ఎగిరే జంతువులకు ఫ్లై ప్రవర్తనను ఇస్తున్నారు. ఇది సరైనది కాదు.

Dog.fly () లేదా crocodile.fly () అని పిలవడం ఎలా అనిపిస్తుంది.

కాబట్టి, ఇప్పుడు మన డిజైన్ సరైనది కాదని మేము అర్థం చేసుకున్నాము మరియు జంతువుల ఉప-తరగతి నుండి ఫ్లై () పద్ధతిని తొలగించాలి.

ఫ్లై ప్రవర్తన కలిగి ఉండటానికి మా డిజైన్ అన్ని జంతు ఉప తరగతులను అమలు చేయని విధంగా మా తరగతులను రూపొందించడానికి ఇతర మార్గం ఏమిటి.

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

ఇప్పుడు, యానిమల్ క్లాస్ నుండి ఫ్లై పద్ధతిని తీసివేసిన తరువాత మా యానిమల్ క్లాస్ క్రింది కోడ్ లాగా కనిపిస్తుంది.

ఇప్పుడు ఫ్లయింగ్ ఇంటర్ఫేస్ను నిర్వచించండి

ఇప్పుడు, డాగ్ క్లాస్ మార్చబడుతుందిగాదిగువ కోడ్ మరియు దీనికి ఫ్లై ప్రవర్తన అవసరం లేదు.

ఎగిరే ప్రవర్తన కలిగి ఉన్న మా జంతు ఉప తరగతుల్లో కొన్నింటిని చూద్దాం.

మేము మా మునుపటి సమస్యను పరిష్కరించాము, కాని మేము క్రొత్త ఇబ్బందుల్లో పడ్డాము మరియు అది “కోడ్ డూప్లికేషన్”.

చెప్పండి, మేము 100 వేర్వేరు ఎగిరే జంతు ఉప తరగతులను కలిగి ఉండబోతున్నాము. ఫ్లై ప్రవర్తన కోసం ఫ్లయింగ్ ఇంటర్ఫేస్ ఎటువంటి అమలును అందించలేనందున మేము ఫ్లై ప్రవర్తన కోసం కోడ్‌ను నకిలీ చేయాలి, తరువాత ఏదైనా ఉప-తరగతిలో ఫ్లై () పద్ధతి అమలును మార్చాలనుకుంటే, మేము ఆ తరగతిని తెరిచి కోడ్‌ను మార్చాలి, ఇది చెడ్డది. మనకు పెద్దది లేదు మరియు అంటే, రన్-టైమ్‌లో తరగతి యొక్క ఎగిరే ప్రవర్తనను మార్చలేము.

చింతించకండి, ఈ సమస్య నుండి బయటపడటానికి స్ట్రాటజీ సరళి ఉంది.

కాబట్టి స్ట్రాటజీ సరళిని ఉపయోగించడానికి మా కోడ్‌ను రీఫ్యాక్టర్ చేద్దాం.

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

c లో రౌండ్ రాబిన్ షెడ్యూలింగ్ అల్గోరిథం

కాబట్టి, ఇవన్నీ ఎలా పనిచేస్తాయో, టెస్ట్ క్లాస్ చూద్దాం

స్ట్రాటజీ సరళిని ఉపయోగించడం ద్వారా మనం ఇప్పుడు ఏదైనా జంతువు యొక్క ఎగిరే ప్రవర్తనను రన్-టైమ్‌లో మార్చగలుగుతున్నాము మరియు అది ఎగిరే ప్రవర్తనను పేర్కొనడానికి ఏ ఉప-తరగతులను అమలు చేయకుండా ఉంటుంది.

స్ట్రాటజీ సరళిని ఎప్పుడు ఉపయోగించాలి?

మీరు రన్-టైమ్‌లో ప్రవర్తనను డైనమిక్‌గా మార్చగలిగినప్పుడు.

స్ట్రాటజీ సరళిని మీరు స్పష్టంగా అర్థం చేసుకున్నారని నిర్ధారించుకోవడానికి మరొక ఉదాహరణ తీసుకుందాం.

పై ఉద్యోగి తరగతిలో మేము అతని / ఆమె హోదాను బట్టి ఉద్యోగి యొక్క వేతనాన్ని సెట్ చేస్తున్నాము. ఒక ఉద్యోగి “ఇంటర్న్” అయితే, అసలు వేతనాన్ని లెక్కించడానికి మేము ప్రాథమిక జీతంలో 10% బోనస్‌ను జోడిస్తున్నాము.

ఒక ఉద్యోగి “వెబ్ డెవలపర్” అయితే, అసలు వేతనాన్ని లెక్కించడానికి మేము ప్రాథమిక జీతంలో 20% బోనస్‌ను చేర్చుతున్నాము మరియు ఇతర రకాల ఉద్యోగులకు ఇలాంటి ప్రక్రియ అనుసరిస్తుంది. అసలు వేతనాన్ని లెక్కించడానికి మా అల్గోరిథం అర్థం చేసుకోవడం చాలా సులభం అయినప్పటికీ చాలా సమయం, ఇది చాలా పోలికలు మరియు లెక్కలను కలిగి ఉంటుంది.

కాబట్టి, ఉద్యోగి-తరగతి కోడ్‌లో తప్పేంటి?

బాగా, పే (గెట్‌పే ()) ను లెక్కించే కోడ్ స్థిరంగా ఉంటుంది. “ఇంటర్న్” కోసం బోనస్‌ను 10% నుండి 14% కి మార్చాలనుకుంటున్నాను. నేను ఎంప్లాయీ-క్లాస్ కోడ్‌ను తెరిచి మార్చాలి.

ఇంకొక సమస్య ఏమిటంటే, నేను రన్ టైమ్‌లో ఉద్యోగి యొక్క పే అల్గోరిథం మార్చలేను. కాబట్టి, ఎలా చేయాలి? ఈ రకమైన సమస్యను నిర్వహించడానికి స్ట్రాటజీ సరళి ప్రత్యేకంగా ఉపయోగించబడుతుంది.

స్ట్రాటజీ సరళిని ఉపయోగించడానికి కోడ్‌ను రిఫ్యాక్టర్ చేద్దాం.

చెల్లింపును లెక్కించడానికి నేను అనేక అల్గారిథమ్‌లను నిర్వచించబోతున్నాను. రన్-టైమ్‌లో చెల్లింపును లెక్కించడానికి నేను ఈ అల్గారిథమ్‌లలో దేనినైనా ఉపయోగించగలను.

ఇప్పుడు, ఉద్యోగుల తరగతి ఎలా మారుతుందో చూద్దాం.

గమనిక: నేను ఉద్యోగుల తరగతి నుండి పే లెక్కింపు తర్కాన్ని తీసివేసి, ఒక సెట్ పేఅల్గోరిథం () పద్ధతిని సృష్టించాను, దీని ద్వారా నేను పే లెక్కింపు కోసం ఉపయోగించాలనుకునే పేఅల్గోరిథంను సెట్ చేస్తాను.

రన్-టైమ్‌లో ఏదైనా పేఅల్గోరిథంను డైనమిక్‌గా పేర్కొనడం ద్వారా పేను లెక్కించడానికి ఇది నాకు వశ్యతను ఇస్తుంది. అలాగే, తరువాత నేను పే లెక్కింపు తర్కాన్ని మార్చవలసి వస్తే నేను కొత్త పేఅల్గోరిథంను సృష్టించగలను మరియు పేను లెక్కించడానికి దాన్ని ఉపయోగించగలను. నేను మునుపటి కోడ్‌ను మార్చాల్సిన అవసరం లేదు, ఇది గొప్పది కాదా?

కాబట్టి ఇది పని చేస్తుందని చూద్దాం.

మీరు స్ట్రాటజీ సరళిని బాగా అర్థం చేసుకున్నారని నేను నమ్ముతున్నాను. ఏదో నేర్చుకోవటానికి ఉత్తమ మార్గం సాధన.

ఒకవేళ మీకు స్ట్రాటజీ సరళికి లేదా మరేదైనా సరళికి సంబంధించిన ప్రశ్నలు ఉంటే, మీ ప్రశ్నలను క్రింద ఉంచండి.

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

అప్పటి వరకు మీరు దానితో కోడ్ ప్లేని డౌన్‌లోడ్ చేసుకోవచ్చు మరియు మీ తలలోని స్ట్రాటజీ సరళిని సిమెంట్ చేశారని నిర్ధారించుకోండి.

మాకు ప్రశ్న ఉందా? వ్యాఖ్యల విభాగంలో వాటిని ప్రస్తావించండి మరియు మేము మిమ్మల్ని సంప్రదిస్తాము.

సంబంధిత పోస్ట్లు: