CodeGym /జావా బ్లాగ్ /యాదృచ్ఛికంగా /వంతెన డిజైన్ నమూనా
John Squirrels
స్థాయి
San Francisco

వంతెన డిజైన్ నమూనా

సమూహంలో ప్రచురించబడింది
హాయ్! మేము ఇప్పుడు విస్తృతమైన మరియు అతి ముఖ్యమైన ఉపయోగకరమైన అంశంగా పరిశోధించడం కొనసాగిస్తున్నాము: డిజైన్ నమూనాలు. ఈ రోజు వంతెన నమూనా గురించి మాట్లాడుకుందాం. ఇతర నమూనాల మాదిరిగానే, సాఫ్ట్‌వేర్ నిర్మాణాన్ని రూపొందించేటప్పుడు డెవలపర్ ఎదుర్కొనే సాధారణ సమస్యలను పరిష్కరించడానికి వంతెన నమూనా ఉపయోగపడుతుంది. ఈ రోజు ఈ నమూనా యొక్క లక్షణాలను అధ్యయనం చేద్దాం మరియు దానిని ఎలా ఉపయోగించాలో తెలుసుకుందాం.

వంతెన నమూనా ఏమిటి?

వంతెన నమూనా నిర్మాణ నమూనా నమూనా. మరో మాటలో చెప్పాలంటే, తరగతులు మరియు వస్తువుల నుండి పూర్తి స్థాయి నిర్మాణాన్ని సృష్టించడం దీని ప్రధాన పని. ఒక వంతెన దీన్ని ఒకటి లేదా అంతకంటే ఎక్కువ తరగతులను ప్రత్యేక సోపానక్రమాలుగా విభజించడం ద్వారా చేస్తుంది: సంగ్రహణ మరియు అమలు . ఒక సోపానక్రమంలో కార్యాచరణలో మార్పు మరొక దానిలో మార్పును కలిగి ఉండదు. అదంతా మంచిది మరియు మంచిది, కానీ ఈ నిర్వచనం చాలా విస్తృతమైనది మరియు అతి ముఖ్యమైన ప్రశ్నకు సమాధానం ఇవ్వదు: "వంతెన నమూనా ఏమిటి?" దాని ఆచరణాత్మక అనువర్తనాన్ని అర్థం చేసుకోవడం మీకు సులభంగా ఉంటుందని నేను భావిస్తున్నాను. కాబట్టి వెంటనే, వంతెన నమూనా కోసం ఒక క్లాసిక్ దృష్టాంతాన్ని క్రియేట్ చేద్దాం. Shapeమేము సాధారణ రేఖాగణిత బొమ్మను సూచించే వియుక్త తరగతిని కలిగి ఉన్నాము :
  • Shape.java

    
    public abstract class Shape {
       public abstract void draw();
    }
    

    మేము త్రిభుజాలు మరియు దీర్ఘ చతురస్రాలు వంటి ఆకృతులను జోడించాలని నిర్ణయించుకున్నప్పుడు, మేము వాటిని తరగతికి వారసత్వంగా అందజేస్తాము Shape:

  • Rectangle.java:

    
    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
    
  • Triangle.java:

    
    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
    
మేము రంగు భావనను పరిచయం చేసే క్షణం వరకు ప్రతిదీ సరళంగా కనిపిస్తుంది. అంటే, ప్రతి ఆకృతికి దాని స్వంత రంగు ఉంటుంది మరియు draw()పద్ధతి యొక్క కార్యాచరణ ఈ రంగుపై ఆధారపడి ఉంటుంది. పద్ధతి యొక్క విభిన్న అమలులను కలిగి ఉండటానికి draw(), మేము ప్రతి ఆకృతి-రంగు కలయిక కోసం ఒక తరగతిని సృష్టించాలి. మనకు మూడు రంగులు ఉంటే, మనకు ఆరు తరగతులు అవసరం: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreenమరియు RectangleRed. ఆరు తరగతులు అంత పెద్ద సమస్య కాదు. కానీ! మేము కొత్త ఆకారం లేదా రంగును జోడించాల్సిన అవసరం ఉంటే, తరగతుల సంఖ్య విపరీతంగా పెరుగుతుంది. ఈ పరిస్థితి నుండి ఎలా బయటపడాలి? ఫీల్డ్‌లో రంగును నిల్వ చేయడం మరియు షరతులతో కూడిన స్టేట్‌మెంట్‌లను ఉపయోగించి అన్ని ఎంపికలను లెక్కించడం ఉత్తమ పరిష్కారం కాదు. రంగును ప్రత్యేక ఇంటర్‌ఫేస్‌కి తరలించడం మంచి పరిష్కారం. Colorపూర్తి చేయడం కంటే త్వరగా చెప్పలేము: మూడు అమలులతో ఇంటర్‌ఫేస్‌ను సృష్టిద్దాం : BlackColor, GreenColorమరియు RedColor:
  • Color.java:

    
    public interface Color {
       void fillColor();
    }
    
  • BlackColor.java:

    
    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
    
  • GreenColor.java

    
    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
    
  • RedColor.java

    
    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }
    

    ఇప్పుడు మేము Colorతరగతికి ఫీల్డ్‌ని జోడిస్తాము Shape. మేము దాని విలువను కన్స్ట్రక్టర్‌లో పొందుతాము.

  • Shape.java:

    
    public abstract class Shape {
       protected Color color;
      
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }
    

    colorమేము అమలులో వేరియబుల్‌ని ఉపయోగిస్తాము Shape. ఆకారాలు ఇప్పుడు ఇంటర్‌ఫేస్ యొక్క కార్యాచరణను ఉపయోగించగలవని దీని అర్థం Color.

  • దీర్ఘచతురస్రం.జావా

    
    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
    
టా-డా! ఇప్పుడు మనం వివిధ రంగులు మరియు ఆకారాలను అనంతంగా సృష్టించవచ్చు మరియు తరగతుల సంఖ్య సరళంగా మాత్రమే పెరుగుతుంది. ఫీల్డ్ Color colorఅనేది రెండు వేర్వేరు తరగతి సోపానక్రమాలను కలిపే వంతెన.

వంతెనను ఎలా నిర్మించాలి: సంగ్రహణ మరియు అమలు

వంతెన నమూనాను వర్ణించే తరగతి రేఖాచిత్రాన్ని చూద్దాం: వంతెన డిజైన్ నమూనాను పరిచయం చేస్తోంది - 2ఇక్కడ మీరు ఒకదానికొకటి కార్యాచరణను ప్రభావితం చేయకుండా సవరించగలిగే రెండు స్వతంత్ర నిర్మాణాలను చూడవచ్చు. మా విషయంలో:
  • సంగ్రహణ అనేది Shapeతరగతి
  • Refined Abstraction అనేది Triangleమరియు Rectangleతరగతులు
  • ఇంప్లిమెంటర్ అనేది Colorఇంటర్‌ఫేస్
  • కాంక్రీట్ ఇంప్లిమెంటర్ అనేది BlackColor, GreenColorమరియు RedColorతరగతులు.
తరగతి Shapeఅనేది ఒక నైరూప్యత — వివిధ రంగులతో ఆకారాలను పూరించడాన్ని నిర్వహించడానికి ఒక మెకానిజం, ఇది ఇంటర్‌ఫేస్‌కు Color(ఇంప్లిమెంటర్) నియోగిస్తుంది. మరియు తరగతులు క్లాస్ ద్వారా అందుబాటులోకి Triangleతెచ్చిన Rectangleమెకానిజంను ఉపయోగించే కాంక్రీట్ తరగతులు Shape. BlackColor, GreenColorమరియు RedColorఅమలు సోపానక్రమంలో ఖచ్చితమైన అమలులు.

వంతెన నమూనాను ఎక్కడ ఉపయోగించాలి

ఈ నమూనాను ఉపయోగించడం యొక్క భారీ ప్రయోజనం ఏమిటంటే, మీరు ఒక సోపానక్రమంలో మరొకదాని యొక్క లాజిక్‌ను విచ్ఛిన్నం చేయకుండా ఫంక్షనల్ తరగతులకు మార్పులు చేయవచ్చు. అలాగే, ఈ విధానం తరగతుల మధ్య కలపడం తగ్గించడానికి సహాయపడుతుంది. ఈ నమూనాను ఉపయోగిస్తున్నప్పుడు ప్రధాన అవసరం "సూచనలను అనుసరించండి" — వాటిలో దేనినీ విస్మరించవద్దు! అందుకోసం, మీరు ఖచ్చితంగా వంతెన నమూనాను ఉపయోగించాల్సిన పరిస్థితులను గుర్తించండి:
  1. మీరు రెండు భావనల (ఉదా ఆకారాలు మరియు రంగులు) కలయికల ఆధారంగా ఎంటిటీల సంఖ్యను విస్తరించాల్సిన అవసరం ఉంటే.

  2. మీరు ఒకే-బాధ్యత సూత్రాన్ని పాటించని పెద్ద తరగతిని ఇరుకైన కార్యాచరణ కలిగిన చిన్న తరగతులుగా విభజించాలనుకుంటే.

  3. ప్రోగ్రామ్ నడుస్తున్నప్పుడు నిర్దిష్ట ఎంటిటీల లాజిక్‌లో మార్పులు చేయాల్సిన అవసరం ఉంటే.

  4. తరగతి లేదా లైబ్రరీ క్లయింట్‌ల నుండి అమలును దాచాల్సిన అవసరం ఉంటే.

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

నమూనా యొక్క లాభాలు మరియు నష్టాలు

ఇతర నమూనాల వలె, వంతెనకు ప్రయోజనాలు మరియు అప్రయోజనాలు రెండూ ఉన్నాయి. వంతెన నమూనా యొక్క ప్రయోజనాలు:
  1. ఇది కోడ్ యొక్క స్కేలబిలిటీని మెరుగుపరుస్తుంది - ప్రోగ్రామ్‌లోని మరొక భాగంలో ఏదైనా విచ్ఛిన్నం అవుతుందనే భయం లేకుండా మీరు కార్యాచరణను జోడించవచ్చు.
  2. ఎంటిటీల సంఖ్య లేకపోతే రెండు భావనల (ఉదాహరణకు, ఆకారాలు మరియు రంగులు) కలయికపై ఆధారపడినప్పుడు ఇది సబ్‌క్లాస్‌ల సంఖ్యను తగ్గిస్తుంది.
  3. ఇది రెండు వేర్వేరు సోపానక్రమాలపై విడిగా పని చేయడం సాధ్యపడుతుంది - సంగ్రహణ మరియు అమలు. ఇద్దరు వేర్వేరు డెవలపర్‌లు ఒకరి కోడ్ వివరాలను మరొకరు లోతుగా పరిశోధించకుండా మార్పులు చేయవచ్చు.
  4. ఇది తరగతుల మధ్య కలపడాన్ని తగ్గిస్తుంది - రెండు తరగతులు కలిసి ఉండే ఏకైక ప్రదేశం వంతెన (అంటే ఫీల్డ్ Color color).
వంతెన నమూనా యొక్క ప్రతికూలతలు:
  1. నిర్దిష్ట పరిస్థితి మరియు ప్రాజెక్ట్ యొక్క మొత్తం నిర్మాణంపై ఆధారపడి, ఇది ప్రోగ్రామ్ పనితీరును ప్రతికూలంగా ప్రభావితం చేస్తుంది (ఉదాహరణకు, మీరు మరిన్ని వస్తువులను ప్రారంభించాల్సిన అవసరం ఉంటే).
  2. రెండు తరగతుల మధ్య మారవలసిన అవసరం కారణంగా ఇది కోడ్‌ను తక్కువ చదవగలిగేలా చేస్తుంది.

వ్యూహం నమూనా నుండి తేడా

వంతెన నమూనా తరచుగా మరొక డిజైన్ నమూనాతో గందరగోళం చెందుతుంది - వ్యూహం. అవి రెండూ కూర్పును ఉపయోగిస్తాయి (మేము బొమ్మలు మరియు రంగులతో ఉదాహరణలో అగ్రిగేషన్‌ని ఉపయోగించినప్పటికీ, వంతెన నమూనా కూర్పును కూడా ఉపయోగించవచ్చు), ఇతర వస్తువులకు పనిని అప్పగించడం. కానీ వాటి మధ్య వ్యత్యాసం ఉంది మరియు అది చాలా పెద్దది. వ్యూహం నమూనా ప్రవర్తనా నమూనా: ఇది పూర్తిగా భిన్నమైన సమస్యలను పరిష్కరిస్తుంది. వ్యూహం అల్గారిథమ్‌లను పరస్పరం మార్చుకోవడానికి అనుమతిస్తుంది, అయితే వంతెన వేర్వేరు అమలుల మధ్య ఎంచుకోవడానికి అమలుల నుండి సంగ్రహాన్ని వేరు చేస్తుంది. మరో మాటలో చెప్పాలంటే, ఒక వ్యూహం వలె కాకుండా, ఒక వంతెన మొత్తం ఎంటిటీలు లేదా క్రమానుగత నిర్మాణాలకు వర్తిస్తుంది. డెవలపర్ యొక్క ఆర్సెనల్‌లో వంతెన నమూనా మంచి ఆయుధంగా ఉంటుంది. ప్రధాన విషయం ఏమిటంటే, దానిని ఉపయోగించడం విలువైన పరిస్థితులను గుర్తించడం మరియు కొన్ని ఇతర నమూనా సముచితంగా ఉన్నప్పుడు గుర్తించడం.
వ్యాఖ్యలు
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION