డిజైన్ పద్ధతులు - అబ్జర్వర్ నమూనాకు శీఘ్ర గైడ్.

అబ్జర్వర్ నమూనా చాలా సాధారణంగా ఉపయోగించే నమూనా. వాస్తవానికి, చాలా ప్రోగ్రామింగ్ భాషలు / గ్రంథాలయాలలో ప్రామాణికం కావడం చాలా సాధారణం. జావాలో, ఇది injava.util.Observer (జావా 9 లో తొలగించబడింది) ఉంది. పైథాన్‌లో ఇది ఎపిప్ ఇన్‌స్టాల్ నమూనా-పరిశీలకుడికి దగ్గరగా ఉంటుంది. C ++ లో, మేము కొన్నిసార్లు బూస్ట్ లైబ్రరీని ఉపయోగించవచ్చు, మరింత ఖచ్చితంగా # చేర్చండి <బూస్ట్ / సిగ్నల్స్ 2.హెచ్పి>. అయినప్పటికీ, ఇది పరిశ్రమలో అనుకూల-నిర్మిత పరిష్కారంగా విస్తృతంగా ఉపయోగించబడుతుంది. దీన్ని సరిగ్గా ఉపయోగించుకోవటానికి మరియు దాని సంక్లిష్టతను అర్థం చేసుకోవడానికి, మనం డైవ్ చేసి అన్వేషించాలి.

ప్రవర్తనా రూపకల్పన నమూనాలలో అబ్జర్వర్ నమూనా వర్గీకరించబడింది. ప్రవర్తనా రూపకల్పన నమూనాలు తరగతులు / వస్తువుల మధ్య సంభాషణకు సంబంధించినవి. [డిజైన్ సరళి ద్వారా వివరించబడింది]

పరిశీలకుడి నమూనా ఏమిటి? అనలాగ్ టెలివిజన్‌ను ప్రసారం చేసే వాకింగ్ మానిటర్ కాకుండా (చిత్రంలో ఉన్నట్లు). నమూనా యొక్క లక్ష్యం ఒకటి నుండి అనేక సంబంధాలను నిర్వచించడం, అంటే ఒక వస్తువు స్థితిని మార్చినప్పుడు, మిగిలినవి స్వయంచాలకంగా తెలియజేయబడతాయి మరియు నవీకరించబడతాయి. మరింత ఖచ్చితంగా, వ్యవస్థలో జరుగుతున్న సంఘటనల గురించి తెలియజేయాలని కోరుకుంటుంది. పజిల్ ముక్కలను మూడు దశల్లో ఉంచండి.

దశ 1 - కీవర్డ్లు

శీఘ్ర-గైడ్‌ల శ్రేణిలోని కీలక పదాలను కీలకపదాలను నిర్వచించడం. ఈ పద్ధతి డిజైన్ నమూనాలను నిజంగా అర్థం చేసుకోవడానికి, వాటిని నా మనస్సులో హార్డ్ కోడ్ చేయడానికి మరియు ఇతర డిజైన్ నమూనాల మధ్య తేడాలను అర్థం చేసుకోవడానికి నాకు సహాయపడింది.

  1. విషయం: ఇది సమాచారం, డేటా లేదా వ్యాపార తర్కం యొక్క కీపర్‌గా పరిగణించబడుతుంది.
  2. నమోదు / అటాచ్: మార్పు వచ్చినప్పుడు పరిశీలకులు తమను తాము నమోదు చేసుకోవాలనుకుంటున్నారు.
  3. ఈవెంట్: పరిశీలకులందరికీ తెలియజేయబడే విధంగా సంఘటనలు ట్రిగ్గర్‌గా పనిచేస్తాయి.
  4. తెలియజేయండి: అమలుపై ఆధారపడి, విషయం పరిశీలకులకు సమాచారాన్ని “నెట్టవచ్చు”, లేదా, విషయం నుండి సమాచారం అవసరమైతే పరిశీలకులు “లాగవచ్చు”.
  5. అప్‌డేట్: పరిశీలకులు తమ స్థితిని ఇతర పరిశీలకుల నుండి స్వతంత్రంగా అప్‌డేట్ చేస్తారు, అయితే ప్రేరేపిత సంఘటనను బట్టి వారి స్థితి మారవచ్చు.

దశ 2 - రేఖాచిత్రం

దీన్ని కొద్దిగా సరళీకృతం చేయడానికి ఈ డిజైన్‌ను వివిధ తరగతులుగా విభజించనివ్వండి.

  • కాంక్రీట్ఆబ్సర్వర్స్ అనేది ప్రస్తుత ఉదాహరణకి ప్రత్యేకమైన సమాచారాన్ని కలిగి ఉన్న తరగతులు. నవీకరణ ఫంక్షన్ విషయం యొక్క నోటిఫై () ఆపరేషన్ ద్వారా పిలువబడుతుంది. పరిశీలకులు వారి ప్రస్తుత స్థితి ఆధారంగా స్వతంత్రంగా నవీకరిస్తారు.
  • అబ్జర్వర్ కాంక్రీట్ పరిశీలకుల మాతృ తరగతి. ఇది ఒక విషయం ఉదాహరణను కలిగి ఉంది. ఒక పరిశీలకుడు ప్రారంభించబడినప్పుడు, అది విషయానికి నమోదు చేస్తుంది / జతచేస్తుంది.
  • సబ్జెక్ట్ క్లాస్‌లో జాబితా లేదా పరిశీలకుల సేకరణ ఉంది. ఒక సంఘటన ప్రారంభించబడినప్పుడు అది నోటిఫై () ఆపరేషన్ అని పిలుస్తుంది, ఇది వారి నవీకరణ ఫంక్షన్‌ను పిలవడం ద్వారా అన్ని పరిశీలకుల ద్వారా లూప్ అవుతుంది.

దశ 3 - ఉదాహరణ ద్వారా కోడ్

కోడ్ తరగతిని నా జిట్ రిపోజిటరీ “ఆండ్రియాస్ పోయాస్” లేదా క్రింద ఉన్న స్నిప్పెట్ల నుండి (అందించిన క్రమంలో) కాపీ చేసి, సి ++ షెల్, జూడూల్, ఆన్‌లైన్ జిడిబి మరియు రన్ వంటి అందుబాటులో ఉన్న ఆన్‌లైన్ సి ++ ఎడిటర్లలో పేస్ట్ చేయాలని నేను సూచిస్తున్నాను. ఇది అవుట్పుట్ను గమనించడానికి. అప్పుడు క్రింద వ్యాఖ్యలు లేదా వివరణ చదవండి. మీ సమయాన్ని వెచ్చించండి, దాన్ని పూర్తిగా చదవండి (అంటే ఒక నిమిషం, తక్కువ కాదు మరియు ఎక్కువ కాదు).

ఉదాహరణ: ఫుట్‌బాల్ ఆటను పరిగణించండి. చాలా మంది మద్దతుదారులు ఆట చూస్తున్నారు. మేము మద్దతుదారులను వయస్సు, యువ మరియు వృద్ధుల వారీగా రెండు వర్గాలుగా విభజించాము. వారి జట్టు గోల్ సాధించినప్పుడు మద్దతుదారులు వారి వయస్సు మరియు వారి ఉత్సాహం స్థాయికి భిన్నంగా భిన్నంగా స్పందిస్తారు.
ఇప్పుడు, పరిశీలకుడి నమూనా కోసం ఉపయోగించే పదాలతో మాట్లాడదాం:

  • ఆట విషయం మరియు మద్దతుదారులు పరిశీలకులు.
  • అన్ని పరిశీలకులు ఈ అంశానికి జతచేయబడ్డారు / నమోదు చేయబడ్డారు మరియు వారి ఫుట్‌బాల్ జట్టు స్కోర్‌లు చేసినప్పుడు వారికి తెలియజేయబడుతుంది (ట్రిగ్గర్-ఈవెంట్ వారి జట్టు స్కోర్‌లు అయితే).
  • అందుకున్న నోటిఫికేషన్‌ను బట్టి పరిశీలకులు వారి ప్రవర్తనను నవీకరిస్తారు.

Subject
ఈ తరగతి కోసం, మాకు పరిశీలకుల జాబితాకు ప్రాప్యత అవసరం. పరిశీలకులు నమోదు చేయబోతున్నప్పుడు, వారు అందుబాటులో ఉన్న జాబితాలో తమను తాము చేర్చుకోవటానికి తీటాచ్ (ఇది) ఫంక్షన్ అని పిలుస్తారు (ఇది పరిశీలకుడి ఉదాహరణ). ఒక సంఘటనను ప్రేరేపించినప్పుడు వెనోటిఫై () పరిశీలకులందరూ వారి స్థితిని స్వతంత్రంగా నవీకరించడానికి. ఈ ఉదాహరణలో, పరిశీలకుడి ఫుట్‌బాల్ జట్టు స్కోర్ చేస్తే ట్రిగ్గర్.

# చేర్చండి 
# చేర్చండి 
నేమ్‌స్పేస్ std ఉపయోగించి;
తరగతి విషయం {
    వెక్టర్ <క్లాస్ అబ్జర్వర్ *> పరిశీలకులు;
    bool స్కోర్; // ట్రిగ్గర్, ఈవెంట్
ప్రజా:
    // పరిశీలకులను నమోదు చేయండి
    void అటాచ్ (అబ్జర్వర్ * obs) {
        observers.push_back (అడ్డంకులను);
    }
   
   // ఇది EVENT
   // స్కోర్ చేస్తే సెట్ చేయండి మరియు అన్ని పరిశీలకులకు తెలియజేయండి
   శూన్యమైన సెట్‌స్కోర్డ్ (బూల్ స్కోరు) {
      స్కోరు = స్కోరు;
      తెలియజేయాలి ();
   }
bool getScored () {
      రిటర్న్ స్కోర్;
   }
   // అమలు అమలు మరింత తగ్గిందని తెలియజేయండి
   // తద్వారా స్క్రిప్ట్ కంపైల్ చేసి రన్ అవుతుంది
   void notify ();
};

అబ్జర్వర్
ఈ తరగతి అది నమోదు చేయబడిన అంశంపై ఆధారపడి ఉంటుంది. కాంక్రీట్ పరిశీలకులు ప్రారంభించినప్పుడు వారు తమను తాము సబ్జెక్టుకు జతచేస్తారు. ఈ ఉదాహరణలో, ప్రతి పరిశీలకుడి స్థితి అతని ఉత్సాహం.

తరగతి పరిశీలకుడు
{
    విషయం * subj;
    పూర్ణాంకం లెవెల్; // రాష్ట్రం
  ప్రజా:
    పరిశీలకుడు (విషయం * మోడ్, int excLevel)
    {
        subj = mod;
        excitLevel = excLevel;
        // పరిశీలకులు తమను తాము సబ్జెక్టుతో నమోదు చేసుకుంటారు / అటాచ్ చేస్తారు
        subj-> అటాచ్ (ఈ);
    }
    వర్చువల్ శూన్య నవీకరణ () = 0;
  రక్షిత:
    విషయం * getSubject () {
       రిటర్న్ సబ్జ్;
    }
    void setExcitementLevel (int excLevel) {
       excitLevel = excLevel;
    }
    int getExcitementLevel () {
       తిరిగి ఉత్సాహం;
    }
};

ఇది విషయం :: నోటిఫై () డిక్లరేషన్ మరియు దాని పనికి ముందు మేము చెప్పినట్లుగా, పరిశీలకులందరికీ వారి స్థితిని నవీకరించమని తెలియజేయడం.

శూన్య విషయం :: తెలియజేయండి () {
  (int i = 0; i <పరిశీలకులు.సైజ్ (); i ++)
    పరిశీలకులు [i] -> నవీకరణ ();
}

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

తరగతి ఓల్డ్_కాన్క్రీట్ఆబ్సర్వర్: పబ్లిక్ అబ్జర్వర్
{
   ప్రజా:
     // సబ్జెక్టుతో నమోదు చేసుకోవాలని పేరెంట్ కన్స్ట్రక్టర్‌ను పిలుస్తుంది
     ఓల్డ్_కాన్క్రీట్ఆబ్సర్వర్ (విషయం * మోడ్, పూర్ణాంకానికి డివి)
        : అబ్జర్వర్ (మోడ్, డివి)}}
     // వృద్ధులకు, ఉత్సాహం స్థాయి ఉంటే
     // 150 కన్నా ఎక్కువ వారు గుండెపోటు ప్రమాదాన్ని అమలు చేస్తారు
     శూన్య నవీకరణ ()
     {
        bool score = getSubject () -> getScored ();
        setExcitementLevel (getExcitementLevel () + 1);
        if (స్కోర్ && getExcitementLevel ()> 150)
        {
          cout << "ఓల్డ్ అబ్జర్వర్ జట్టు స్కోర్ చేసింది !!"
               << "అతని ఉత్సాహం స్థాయి"
               << getExcitementLevel ()
               << "గుండెపోటు నుండి జాగ్రత్తగా ఉండండి!" << endl;
        } Else {
          cout << "జట్టు స్కోర్ చేయలేదు. Yeeeih గురించి ఆందోళన చెందడానికి ఏమీ లేదు"
               << endl;
        }
    end // ముగింపు నవీకరణ ()
};
తరగతి యంగ్_కాంక్రీట్ఆబ్సర్వర్: పబ్లిక్ అబ్జర్వర్
{
   ప్రజా:
     // సబ్జెక్టుతో నమోదు చేసుకోవాలని పేరెంట్ కన్స్ట్రక్టర్‌ను పిలుస్తుంది
     యంగ్_కాంక్రీట్ఆబ్సర్వర్ (విషయం * మోడ్, పూర్ణాంకం డివి)
       : అబ్జర్వర్ (మోడ్, డివి)}}
     // వృద్ధులకు, ఉత్సాహం స్థాయి ఉంటే
     // 100 కన్నా ఎక్కువ వారు గుండెపోటు ప్రమాదాన్ని అమలు చేస్తారు
     శూన్య నవీకరణ ()
     {
        bool score = getSubject () -> getScored ();
        setExcitementLevel (getExcitementLevel () + 1);
        if (స్కోర్ && getExcitementLevel ()> 100)
        {
          cout << "యంగ్ అబ్జర్వర్ జట్టు స్కోర్ చేసింది !!"
               << "అతని ఉత్సాహం స్థాయి"
               << getExcitementLevel ()
               << "తాగి డ్రైవ్ చేయవద్దు !!" << endl;
        } Else {
          cout << "జట్టు స్కోర్ చేయలేదు. యీహ్ ఆందోళన చెందడానికి ఏమీ లేదు"
               << endl;
       }
    end // ముగింపు నవీకరణ ()
};

ప్రధాన ఫంక్షన్
కాంక్రీట్ పరిశీలకులు తమను తాము సబ్జెక్ట్ ఉదాహరణగా నమోదు చేసుకుంటారు. వారి స్థితి రెండవ పరామితి అయిన ఉత్సాహ స్థాయి. ఈవెంట్ “subj.setScored (true)” ను ప్రేరేపించినప్పుడు, రిజిస్టర్డ్ పరిశీలకులను నవీకరించడానికి సబ్జెక్ట్ :: నోటిఫై () అంటారు. దిగువ దృష్టాంతంలో, మనకు ముగ్గురు పరిశీలకులు ఉన్నారు, యంగ్ ఓబ్స్ 1 అతిగా ప్రవర్తించారు మరియు పానీయం మరియు డ్రైవ్ యొక్క ప్రమాదాన్ని నడుపుతున్నారు, ఓల్డ్ ఓబ్స్ 1 కూడా వేరే ప్రమాదాన్ని (గుండెపోటు) ఎక్కువగా పరిగణిస్తుంది. చివరగా, యంగ్ ఓబ్స్ 2 మొదటి వ్యక్తిగా కూడా చిన్నవాడు, అతను అతిగా ప్రవర్తించనందున ఆందోళన చెందాల్సిన అవసరం లేదు.

ముగ్గురు పరిశీలకులు వారి స్థితి (ఉత్సాహం స్థాయి) మరియు వారి రకం (యువ లేదా ముసలి) ఆధారంగా స్వతంత్రంగా నవీకరించబడటం గమనించాలి.
పూర్ణాంకానికి ప్రధాన () {
   విషయం subj;
   యంగ్_కాంక్రీట్ఆబ్సర్వర్ యంగ్ఆబ్స్ 1 (& సబ్జ్, 100);
   ఓల్డ్_కాన్క్రీట్ఆబ్సర్వర్ ఓల్డ్ఆబ్స్ 1 (& సబ్జ్, 150);
   యంగ్_కాంక్రీట్ఆబ్సర్వర్ యంగ్ఆబ్స్ 2 (& సబ్జ్, 52);
   subj.setScored (నిజమైన);
}
// అవుట్పుట్
// యంగ్ అబ్జర్వర్ జట్టు స్కోర్ చేసింది !! అతని ఉత్సాహం స్థాయి 101
// తాగకండి మరియు డ్రైవ్ చేయవద్దు !!
// ఓల్డ్ అబ్జర్వర్ జట్టు స్కోర్ చేసింది !! అతని ఉత్సాహం స్థాయి 151 వాచ్
// గుండెపోటు నుండి! జట్టు స్కోర్ చేయలేదు.
// యీహ్ ఆందోళన చెందడానికి ఏమీ లేదు

అబ్జర్వర్ నమూనా వాడకానికి కొన్ని ప్రయోజనాలు ఉన్నాయి మరియు ఈ నమూనాను సంప్రదించినప్పుడు గమనించవలసిన కొన్ని అంశాలు ఉన్నాయి [లెర్నింగ్ పైథాన్ డిజైన్ సరళి].

  • అబ్జర్వర్ నమూనా సబ్జెక్ట్ మరియు అబ్జర్వర్ వదులుగా కలుపుతారు. కాంక్రీట్ఆబ్సర్వర్ క్లాస్ గురించి విషయం తెలుసుకోవలసిన అవసరం లేదు. ఏదైనా కొత్త అబ్జర్వర్‌ను ఏ సమయంలోనైనా జోడించవచ్చు. క్రొత్త అబ్జర్వర్ జోడించబడినప్పుడు విషయాన్ని సవరించాల్సిన అవసరం లేదు. పరిశీలకులు మరియు విషయాలు ఒకదానితో ఒకటి స్వతంత్రంగా లేవు, కాబట్టి, విషయం లేదా పరిశీలకుడిలో మార్పులు ఒకదానికొకటి ప్రభావితం కావు.
  • అబ్జర్వర్ ఇంటర్‌ఫేస్‌ను తక్షణం చేయవచ్చు కాబట్టి, కూర్పుకు ఎంపిక లేదు.
  • అబ్జర్వర్ దుర్వినియోగం చేయబడితే, ఇది సులభంగా సంక్లిష్టతను జోడిస్తుంది మరియు పనితీరు సమస్యలకు దారితీస్తుంది.
  • నోటిఫికేషన్లు నమ్మదగనివి మరియు జాతి పరిస్థితులు లేదా అస్థిరతకు దారితీయవచ్చు.

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

డిజైన్ నమూనాలపై ఇతర శీఘ్ర మార్గదర్శకాలు:

  1. డిజైన్ పద్ధతులు - వియుక్త కర్మాగారానికి శీఘ్ర గైడ్.
  2. డిజైన్ పద్ధతులు - వంతెన సరళికి శీఘ్ర గైడ్.
  3. డిజైన్ పద్ధతులు - బిల్డర్ సరళికి శీఘ్ర గైడ్.
  4. డిజైన్ పద్ధతులు - డెకరేటర్ సరళికి శీఘ్ర గైడ్.
  5. డిజైన్ పద్ధతులు - ముఖభాగం సరళికి శీఘ్ర గైడ్.
  6. డిజైన్ పద్ధతులు - అబ్జర్వర్ సరళికి శీఘ్ర గైడ్.
  7. డిజైన్ పద్ధతులు - సింగిల్టన్ సరళికి శీఘ్ర గైడ్.