നിങ്ങൾക്ക് ആവശ്യമുള്ള ഡിസൈൻ പാറ്റേൺ എങ്ങനെ കണ്ടെത്താം? ഡിസൈൻ പാറ്റേണുകൾ. രൂപകങ്ങളിലെ OOP പാറ്റേണുകൾ

ലേഖനം ആരംഭിക്കുന്നതിന് മുമ്പ്, പ്രോഗ്രാമിംഗിലെ ഡിസൈൻ പാറ്റേണുകളെക്കുറിച്ചുള്ള എൻ്റെ സുഹൃത്ത് ഡെനിസ് പോർപ്ലെങ്കോയുടെ ഒരു റിപ്പോർട്ട് നൽകാൻ ഞാൻ ആഗ്രഹിക്കുന്നു:

ഒരേ തരത്തിലുള്ള, വാസ്തവത്തിൽ, ഡിസൈനിൽ, പതിവായി ഉണ്ടാകുന്ന പ്രശ്നങ്ങൾക്ക് പരിഹാരമായാണ് ഡിസൈൻ പാറ്റേണുകൾ ഉടലെടുത്തതെന്ന് ഞാൻ നിങ്ങളെ ഓർമ്മിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നു. എന്നാൽ അവരുടെ പ്രധാന വികസനം അവർക്ക് ലഭിച്ചു സോഫ്റ്റ്വെയര് വികസനം. വികസനത്തിൻ്റെ പശ്ചാത്തലത്തിൽ ഞാൻ കഥ തുടരും സോഫ്റ്റ്വെയർ.

പാറ്റേണുകളുടെ വിഷയം വളരെ വിശാലമാണ്; ഡിസൈൻ പാറ്റേണുകളെ പ്രോഗ്രാമിംഗ് പാറ്റേണുകൾ, സിസ്റ്റം ആർക്കിടെക്ചർ പാറ്റേണുകൾ, ഡാറ്റ സ്റ്റോറേജ് പാറ്റേണുകൾ എന്നിങ്ങനെ തരം തിരിക്കാം. ഇവയാണ് ഏറ്റവും ജനപ്രിയമായ പാറ്റേണുകൾ, മറ്റുള്ളവയുണ്ട്. ഞാൻ അവയെല്ലാം ചുവടെ പട്ടികപ്പെടുത്തും.

പല കമ്പനികളും അവരുടെ പരിശീലനത്തിൽ പാറ്റേണുകൾ ഉപയോഗിക്കുന്നു. പാറ്റേണുകളുടെ ഉപയോഗത്തിന് അതിൻ്റെ ഗുണങ്ങളും ദോഷങ്ങളുമുണ്ട്.
ഡിസൈൻ പാറ്റേണുകൾ ഉപയോഗിക്കുന്നതിൻ്റെ പ്രയോജനങ്ങൾ:
- സ്വതന്ത്ര രൂപകൽപ്പനയിൽ പാറ്റേണുകൾ ഉപയോഗിക്കുന്നതിൻ്റെ പ്രധാന നേട്ടം, പാറ്റേൺ പ്രശ്നത്തിന് ഒരു പേര് നൽകുകയും ഒരു റെഡിമെയ്ഡ് അമൂർത്തീകരണങ്ങളിലൂടെ നിരവധി പ്രശ്നങ്ങൾ പരിഹരിക്കാനുള്ള വഴികൾ നിർവചിക്കുകയും ചെയ്യുന്നു എന്നതാണ്.
- സിസ്റ്റം ഡെവലപ്പർമാർ തമ്മിലുള്ള ആശയവിനിമയം സുഗമമാക്കുന്നു
- ഡിസൈൻ പാറ്റേണുകളുടെ ഉപയോഗം റെഡിമെയ്ഡ് കോഡ് ലൈബ്രറികളുടെ ഉപയോഗത്തിന് സമാനമാണ്
ശരിയായ ഉപയോഗംടെംപ്ലേറ്റുകൾ ഡെവലപ്പർമാരെ വികസനത്തിൻ്റെ ആവശ്യമുള്ള വെക്റ്റർ നിർണ്ണയിക്കാൻ സഹായിക്കുന്നു, കൂടാതെ വികസന പ്രക്രിയയിൽ ഉണ്ടാകാവുന്ന നിരവധി പ്രശ്നങ്ങൾ ഒഴിവാക്കുന്നു.

ഡിസൈൻ പാറ്റേണുകൾ ഉണ്ടാക്കുന്ന പ്രശ്നങ്ങൾ:
— എൻ്റെ അഭിപ്രായത്തിൽ, ടെംപ്ലേറ്റുകൾ ഉപയോഗിക്കുന്നതിനുള്ള ഏറ്റവും പ്രധാനപ്പെട്ട പ്രശ്നം സിസ്റ്റം രൂപകൽപ്പനയിലും വികസനത്തിലും വഴക്കം നഷ്ടപ്പെടുന്നതാണ്
- ടെംപ്ലേറ്റുകളുടെ ഉപയോഗം സിസ്റ്റത്തെ സങ്കീർണ്ണമാക്കുന്നു
- ഒരു പ്രത്യേക പാറ്റേൺ അന്ധമായി പിന്തുടരുകയും അത് എല്ലായിടത്തും ഉപയോഗിക്കുകയും ചെയ്യുന്നത് വാസ്തുശാസ്ത്രപരവും യുക്തിപരവുമായ ഒരു കൂട്ടം പ്രശ്നങ്ങൾക്ക് കാരണമാകും.

അടിസ്ഥാന പ്രോഗ്രാമിംഗ് പാറ്റേണുകൾ

അടിസ്ഥാനപരം

ഡെലിഗേഷൻ ടെംപ്ലേറ്റ്ഡെലിഗേഷൻ പാറ്റേൺ - ഒരു വസ്തു ബാഹ്യമായി ചില സ്വഭാവം പ്രകടിപ്പിക്കുന്നു, എന്നാൽ വാസ്തവത്തിൽ ആ സ്വഭാവം നിർവഹിക്കാനുള്ള ഉത്തരവാദിത്തം ബന്ധപ്പെട്ട ഒബ്ജക്റ്റിന് നൽകുന്നു.
സാമ്പിൾ ഫങ്ഷണൽ ഡിസൈൻഫങ്ഷണൽ ഡിസൈൻ - ഒരു കമ്പ്യൂട്ടർ പ്രോഗ്രാമിൻ്റെ ഓരോ മൊഡ്യൂളിനും ഒരു ഉത്തരവാദിത്തം മാത്രമാണുള്ളതെന്നും പ്രോഗ്രാമിൻ്റെ മറ്റ് ഭാഗങ്ങളിൽ പാർശ്വഫലങ്ങളില്ലാതെ അത് നിർവഹിക്കുന്നുവെന്നും ഉറപ്പാക്കുന്നു.
മാറ്റമില്ലാത്ത ഇൻ്റർഫേസ്(മാറ്റമില്ലാത്ത ഇൻ്റർഫേസ്) - ഒരു മാറ്റമില്ലാത്ത വസ്തുവിൻ്റെ സൃഷ്ടി.
ഇൻ്റർഫേസ് - ഘടനാപരമായ പൊതു രീതി കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകൾഅവരെ എളുപ്പം മനസ്സിലാക്കാൻ.
ഇൻ്റർഫേസ് മാർക്കർ(മാർക്കർ ഇൻ്റർഫേസ്) - മാർക്കർ ഇൻ്റർഫേസ് നടപ്പിലാക്കുന്നതിൻ്റെ സാന്നിധ്യം അല്ലെങ്കിൽ അഭാവം ഒരു ആട്രിബ്യൂട്ടായി ഉപയോഗിക്കുന്നു (ഒരു ഒബ്ജക്റ്റ് എൻ്റിറ്റിയുടെ അടയാളമായി). ആധുനിക പ്രോഗ്രാമിംഗ് ഭാഷകൾ പകരം ആട്രിബ്യൂട്ടുകളോ വ്യാഖ്യാനങ്ങളോ ഉപയോഗിച്ചേക്കാം.
പ്രോപ്പർട്ടീസ് കണ്ടെയ്നർ(പ്രോപ്പർട്ടി കണ്ടെയ്നർ) - പുതിയ പ്രോപ്പർട്ടികൾ ഉപയോഗിച്ച് ക്ലാസ് വിപുലീകരിക്കുന്നതിനുപകരം, ഒരു കണ്ടെയ്നറിലേക്ക് (ക്ലാസ്സിനുള്ളിൽ) ഒരു ക്ലാസിനായി അധിക പ്രോപ്പർട്ടികൾ ചേർക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
ഇവൻ്റ് പാറ്റേൺ(ഇവൻ്റ് ചാനൽ) - ഇവൻ്റുകൾക്കായി ഒരു കേന്ദ്രീകൃത ചാനൽ സൃഷ്‌ടിക്കാൻ പ്രസിദ്ധീകരിക്കുക/സബ്‌സ്‌ക്രൈബ് പാറ്റേൺ വിപുലീകരിക്കുന്നു. സബ്‌സ്‌ക്രൈബുചെയ്യാൻ ഒരു പ്രോക്‌സി ഒബ്‌ജക്റ്റും ഒരു ചാനലിൽ ഒരു ഇവൻ്റ് പ്രസിദ്ധീകരിക്കാൻ ഒരു പ്രോക്‌സി ഒബ്‌ജക്‌റ്റും ഉപയോഗിക്കുന്നു. യഥാർത്ഥ പ്രസാധകനിൽ നിന്നോ വരിക്കാരിൽ നിന്നോ വേറിട്ട് പ്രതിനിധി നിലവിലുണ്ട്. ഒരു ചാനലിൽ മാത്രം രജിസ്റ്റർ ചെയ്തിട്ടുണ്ടെങ്കിലും, ഒരു വരിക്കാരന് ഒന്നിലധികം എൻ്റിറ്റികളിൽ നിന്ന് പ്രസിദ്ധീകരിച്ച ഇവൻ്റുകൾ സ്വീകരിക്കാൻ കഴിയും.

ജനറേറ്റീവ് പാറ്റേണുകൾ

തൽക്ഷണ പ്രക്രിയയെ അമൂർത്തമാക്കുന്ന ഡിസൈൻ പാറ്റേണുകളാണ് ക്രിയേഷണൽ പാറ്റേണുകൾ. ഒബ്‌ജക്‌റ്റുകൾ സൃഷ്‌ടിക്കുന്നതും രചിക്കുന്നതും അവതരിപ്പിക്കുന്നതുമായ രീതിയിൽ സിസ്റ്റത്തെ സ്വതന്ത്രമാക്കാൻ അവ സാധ്യമാക്കുന്നു. ക്ലാസുകളെ ഇൻസ്റ്റൻഷ്യേറ്റ് ചെയ്യുന്ന ഒരു ടെംപ്ലേറ്റ് ഇൻസ്‌റ്റൻ്റിയേറ്റഡ് ക്ലാസ് പരിഷ്‌ക്കരിക്കുന്നതിന് ഇൻഹെറിറ്റൻസ് ഉപയോഗിക്കുന്നു, കൂടാതെ ഒബ്‌ജക്റ്റുകളെ തൽക്ഷണം ചെയ്യുന്ന ഒരു ടെംപ്ലേറ്റ് മറ്റൊരു ഒബ്‌ജക്റ്റിലേക്ക് തൽക്ഷണത്തെ നിയോഗിക്കുന്നു.
അമൂർത്തമായ ഫാക്ടറി(അമൂർത്ത ഫാക്ടറി) - സിസ്റ്റം ഘടകങ്ങൾ സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു ഇൻ്റർഫേസ് നൽകുന്ന ഒരു ക്ലാസ്.
ബിൽഡർ(ബിൽഡർ) - ഒരു സങ്കീർണ്ണമായ ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു ഇൻ്റർഫേസ് നൽകുന്ന ഒരു ക്ലാസ്.
ഫാക്ടറി രീതി(ഫാക്‌ടറി രീതി) - ഒരു ഒബ്‌ജക്‌റ്റ് സൃഷ്‌ടിക്കുന്നതിനുള്ള ഒരു ഇൻ്റർഫേസ് നിർവചിക്കുന്നു, എന്നാൽ ഏത് ക്ലാസ് തൽക്ഷണം ചെയ്യണമെന്ന് തീരുമാനിക്കുന്നതിന് അത് സബ്‌ക്ലാസ്സുകൾക്ക് വിടുന്നു.
അലസമായ സമാരംഭം(അലസമായ ഇനീഷ്യലൈസേഷൻ) - അതിലേക്കുള്ള ആദ്യ കോളിൽ ആരംഭിക്കുന്ന ഒരു വസ്തു.
സിംഗിൾസ് പൂൾ(മൾട്ടിടൺ) - ഒരു ക്ലാസ് ഒബ്‌ജക്റ്റ് സംഭവങ്ങൾക്ക് പേരിട്ടിട്ടുണ്ടെന്നും അവയ്‌ക്ക് ഒരു ആഗോള ആക്‌സസ് പോയിൻ്റ് നൽകുന്നുവെന്നും ഉറപ്പാക്കുന്നു.
ഒബ്ജക്റ്റ് പൂൾ(ഒബ്ജക്റ്റ് പൂൾ) - സമാരംഭിച്ചതും ഉപയോഗിക്കാൻ തയ്യാറായതുമായ ഒബ്‌ജക്റ്റുകളുടെ ഒരു കൂട്ടം പ്രവർത്തിക്കുന്നതിനുള്ള ഒരു ഇൻ്റർഫേസിനെ പ്രതിനിധീകരിക്കുന്ന ഒരു ക്ലാസ്.
പ്രോട്ടോടൈപ്പ്(പ്രോട്ടോടൈപ്പ്) — ഒരു ഒബ്‌ജക്‌റ്റ് സൃഷ്‌ടിക്കുന്നതിന് പകരം മറ്റൊരു ഒബ്‌ജക്‌റ്റ് ക്ലോൺ ചെയ്‌ത് സൃഷ്‌ടിക്കുന്നതിനുള്ള ഇൻ്റർഫേസ് നിർവചിക്കുന്നു.
ഒരു റിസോഴ്സ് നേടുന്നത് സമാരംഭമാണ്(റിസോഴ്സ് അക്വിസിഷൻ ഇനീഷ്യലൈസേഷൻ ആണ് (RAII)) - ഒരു നിശ്ചിത റിസോഴ്സ് ഏറ്റെടുക്കുന്നത് സമാരംഭിക്കലുമായി സംയോജിപ്പിച്ചിരിക്കുന്നു, കൂടാതെ അത് പുറത്തുവിടുന്നത് ഒരു വസ്തുവിൻ്റെ നാശവുമായി സംയോജിപ്പിക്കുന്നു.
ഏകാകി(സിംഗിൾടൺ) - ഒരു ഉദാഹരണം മാത്രമുള്ള ഒരു ക്ലാസ്.

ഘടനാപരമായ പാറ്റേണുകൾ

ഘടനാപരമായ ടെംപ്ലേറ്റുകൾ വിവിധ നിർവചിക്കുന്നു സങ്കീർണ്ണമായ ഘടനകൾ, നിലവിലുള്ള ഒബ്‌ജക്റ്റുകളുടെ ഇൻ്റർഫേസ് അല്ലെങ്കിൽ അത് നടപ്പിലാക്കുന്നത് മാറ്റുന്നു, ഇത് പ്രോഗ്രാം വികസിപ്പിക്കുന്നതും ഒപ്റ്റിമൈസ് ചെയ്യുന്നതും എളുപ്പമാക്കുന്നു.
അഡാപ്റ്റർ(അഡാപ്റ്റർ / റാപ്പർ) - മറ്റ് രണ്ട് ഒബ്‌ജക്റ്റുകൾ തമ്മിലുള്ള പ്രതിപ്രവർത്തനം നൽകുന്ന ഒരു ഒബ്‌ജക്റ്റ്, അവയിലൊന്ന് ഉപയോഗിക്കുന്നു, മറ്റൊന്ന് ആദ്യത്തേതിന് അനുയോജ്യമല്ലാത്ത ഒരു ഇൻ്റർഫേസ് നൽകുന്നു.
പാലം(ബ്രിഡ്ജ്) - ആക്സസ് ഇൻ്റർഫേസും ക്ലാസ് നടപ്പിലാക്കൽ ഇൻ്റർഫേസും സ്വതന്ത്രമായി മാറ്റാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു ഘടന.
ലിങ്കർ(സമ്മിശ്രം) - തനിക്കു സമാനമായ വസ്തുക്കളെ സംയോജിപ്പിക്കുന്ന ഒരു വസ്തു.
അലങ്കാരപ്പണിക്കാരൻഅഥവാ റാപ്പർ(ഡെക്കറേറ്റർ) അല്ലെങ്കിൽ (റാപ്പർ) - അനന്തരാവകാശം ഉപയോഗിക്കാതെ മറ്റൊരു ക്ലാസിൻ്റെ പ്രവർത്തനക്ഷമത വർദ്ധിപ്പിക്കുന്ന ഒരു ക്ലാസ്.
മുഖച്ഛായ(മുഖം) - നിരവധി ക്ലാസുകൾ ഉപയോഗിച്ച് സൃഷ്ടിയെ സംഗ്രഹിക്കുന്ന ഒരു വസ്തു, അവയെ ഒരൊറ്റ മൊത്തത്തിൽ സംയോജിപ്പിക്കുന്നു.
പ്രവേശനത്തിൻ്റെ ഒരൊറ്റ പോയിൻ്റ്(ഫ്രണ്ട് കൺട്രോളർ) - നൽകുന്നു ഏകീകൃത ഇൻ്റർഫേസ്സബ്സിസ്റ്റത്തിലെ ഇൻ്റർഫേസുകൾക്കായി. ഫ്രണ്ട് കൺട്രോളർ സബ്സിസ്റ്റം ഉപയോഗിക്കാൻ എളുപ്പമാക്കുന്ന ഒരു ഉയർന്ന തലത്തിലുള്ള ഇൻ്റർഫേസ് നിർവചിക്കുന്നു.
അവസരവാദി(ഫ്ലൈവെയ്റ്റ്) - ഇത് ഒരു അദ്വിതീയ ഉദാഹരണമായി സ്വയം പ്രതിനിധീകരിക്കുന്ന ഒരു വസ്തുവാണ് പല സ്ഥലങ്ങൾപ്രോഗ്രാം, എന്നാൽ വാസ്തവത്തിൽ ഒന്നല്ല.
ഡെപ്യൂട്ടി(പ്രോക്സി) - മറ്റ് രണ്ട് ഒബ്‌ജക്റ്റുകൾക്കിടയിൽ ഒരു ഇടനിലക്കാരനായി പ്രവർത്തിക്കുന്ന ഒരു ഒബ്‌ജക്റ്റ്, അതിലൂടെ ആക്‌സസ് ചെയ്യുന്ന ഒബ്‌ജക്റ്റിലേക്കുള്ള ആക്‌സസ് നടപ്പിലാക്കുന്നു/നിയന്ത്രിക്കുന്നു.

പെരുമാറ്റ രീതികൾ

ബിഹേവിയറൽ പാറ്റേണുകൾ വസ്തുക്കൾ തമ്മിലുള്ള പ്രതിപ്രവർത്തനത്തെ നിർവചിക്കുന്നു, അങ്ങനെ അതിൻ്റെ വഴക്കം വർദ്ധിപ്പിക്കുന്നു.
ഉത്തരവാദിത്ത ശൃംഖല(ഉത്തരവാദിത്തത്തിൻ്റെ ശൃംഖല) - ഉത്തരവാദിത്ത തലങ്ങളുടെ ഒരു സംവിധാനത്തിൽ സംഘടിപ്പിക്കാൻ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്.
ടീം(കമാൻഡ്) - ഒരു പ്രവർത്തനത്തെ പ്രതിനിധീകരിക്കുന്നു. കമാൻഡ് ഒബ്ജക്റ്റിൽ പ്രവർത്തനവും അതിൻ്റെ പാരാമീറ്ററുകളും അടങ്ങിയിരിക്കുന്നു.
വ്യാഖ്യാതാവ്(വ്യാഖ്യാതാവ്) - പതിവായി സംഭവിക്കുന്ന, എന്നാൽ മാറ്റത്തിന് വിധേയമായ ഒരു പ്രശ്നം പരിഹരിക്കുക.
ഇറ്ററേറ്റർ(ഇറ്ററേറ്റർ) - അഗ്രഗേറ്റിൻ്റെ ഭാഗമായ ഓരോ ഒബ്‌ജക്റ്റുകളുടെയും വിവരണങ്ങൾ ഉപയോഗിക്കാതെ, ഒരു മൊത്തത്തിലുള്ള ഒബ്‌ജക്റ്റിൻ്റെ ഘടകങ്ങളിലേക്ക് ക്രമാനുഗതമായ ആക്‌സസ് നേടാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു വസ്തുവിനെ പ്രതിനിധീകരിക്കുന്നു.
മധ്യസ്ഥൻ(മധ്യസ്ഥൻ) - രൂപപ്പെടുമ്പോൾ ഒന്നിലധികം വസ്തുക്കൾ തമ്മിലുള്ള ഇടപെടൽ നൽകുന്നു അയഞ്ഞ കപ്ലിംഗ്ഒബ്‌ജക്‌റ്റുകൾ പരസ്പരം വ്യക്തമായി പരാമർശിക്കേണ്ടതിൻ്റെ ആവശ്യകത ഇല്ലാതാക്കുകയും ചെയ്യുന്നു.
സൂക്ഷിപ്പുകാരന്(മെമെൻ്റോ) - എൻക്യാപ്‌സുലേഷൻ തകർക്കാതെ തന്നെ ഒരു വസ്തുവിൻ്റെ ആന്തരിക അവസ്ഥകൾ ക്യാപ്‌ചർ ചെയ്യാനും സംരക്ഷിക്കാനും നിങ്ങളെ അനുവദിക്കുന്നു, അതുവഴി നിങ്ങൾക്ക് പിന്നീട് ഈ അവസ്ഥകളിൽ അത് പുനഃസ്ഥാപിക്കാൻ കഴിയും.
ശൂന്യമായ വസ്തു(നൾ ഒബ്‌ജക്റ്റ്) - ഒരു "ഡിഫോൾട്ട്" ഒബ്‌ജക്റ്റ് നൽകിക്കൊണ്ട് നൾ പോയിൻ്ററുകളെ തടയുന്നു.
നിരീക്ഷകൻ(നിരീക്ഷകൻ) - ഒബ്‌ജക്‌റ്റുകൾക്കിടയിൽ ഒന്നിൽ നിന്ന് ഒന്നിലധികം ആശ്രിതത്വം നിർവചിക്കുന്നു, അങ്ങനെ ഒരു വസ്തുവിൻ്റെ അവസ്ഥ മാറുമ്പോൾ, അതിനെ ആശ്രയിക്കുന്ന എല്ലാവരെയും ഈ സംഭവത്തെക്കുറിച്ച് അറിയിക്കും.
സേവകൻ(സേവകൻ) - ഒരു കൂട്ടം ക്ലാസുകൾക്ക് പൊതുവായ പ്രവർത്തനം നൽകാൻ ഉപയോഗിക്കുന്നു.
സ്പെസിഫിക്കേഷൻ(സ്പെസിഫിക്കേഷൻ) - ബിസിനസ് ലോജിക് ലിങ്ക് ചെയ്യാൻ സഹായിക്കുന്നു.
സംസ്ഥാനം(സ്റ്റേറ്റ്) - പ്രോഗ്രാം എക്സിക്യൂഷൻ സമയത്ത്, ഒരു ഒബ്ജക്റ്റ് അതിൻ്റെ അവസ്ഥയെ ആശ്രയിച്ച് അതിൻ്റെ സ്വഭാവം മാറ്റേണ്ട സന്ദർഭങ്ങളിൽ ഉപയോഗിക്കുന്നു.
തന്ത്രം(തന്ത്രം) - അൽഗോരിതങ്ങളുടെ ഒരു കുടുംബത്തെ നിർവചിക്കുന്നതിനും അവ ഓരോന്നും പൊതിഞ്ഞ് അവയുടെ പരസ്പര വിനിമയക്ഷമത ഉറപ്പാക്കുന്നതിനും രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു.
ടെംപ്ലേറ്റ് രീതി(ടെംപ്ലേറ്റ് രീതി) - അൽഗോരിതത്തിൻ്റെ അടിസ്ഥാനം നിർവചിക്കുകയും അതിൻ്റെ ഘടന മൊത്തത്തിൽ മാറ്റാതെ തന്നെ അൽഗോരിതത്തിൻ്റെ ചില ഘട്ടങ്ങൾ പുനർനിർവചിക്കാൻ പിൻഗാമികളെ അനുവദിക്കുകയും ചെയ്യുന്നു.
സന്ദർശകൻ(സന്ദർശകൻ) - മറ്റ് ക്ലാസുകളിലെ ഒബ്ജക്റ്റുകളിൽ നടത്തുന്ന ഒരു പ്രവർത്തനം വിവരിക്കുന്നു. നിങ്ങൾ വിസിറ്റർ ക്ലാസ് മാറ്റുമ്പോൾ, നൽകിയ ക്ലാസുകൾ മാറ്റേണ്ട ആവശ്യമില്ല.
ലളിതമായ നയം- അത്തരമൊരു പാറ്റേൺ നിലവിലുണ്ടെന്ന് എനിക്കറിയാം, പക്ഷേ അതിൻ്റെ അർത്ഥമെന്താണെന്ന് ഞാൻ ഇതുവരെ കണ്ടെത്തിയില്ല. നിങ്ങൾക്ക് എന്തെങ്കിലും വിവരങ്ങൾ ഉണ്ടെങ്കിൽ, അത് അഭിപ്രായങ്ങളിൽ പോസ്റ്റുചെയ്യുക.
കേൾവിക്കാരൻ(ഇവൻ്റ് ശ്രോതാവ്) - സമാനമായത്
ഒറ്റത്തവണ സന്ദർശകൻ(ഒറ്റ-സേവന സന്ദർശകൻ) - സന്ദർശക പാറ്റേൺ നടപ്പിലാക്കുന്നത് ഒപ്റ്റിമൈസ് ചെയ്യുന്നു, അത് ആരംഭിക്കുകയും ഒരിക്കൽ ഉപയോഗിക്കുകയും പിന്നീട് ഇല്ലാതാക്കുകയും ചെയ്യുന്നു.
ശ്രേണിപരമായ സന്ദർശകൻ(ശ്രേണീകൃത സന്ദർശകൻ) - ഒരു ശ്രേണിപരമായ ഡാറ്റാ ഘടനയുടെ (ഉദാഹരണത്തിന്, ഒരു വൃക്ഷം) എല്ലാ ശീർഷകങ്ങളിലും സഞ്ചരിക്കുന്നതിനുള്ള ഒരു മാർഗം നൽകുന്നു.

സമാന്തര പ്രോഗ്രാമിംഗ് പാറ്റേണുകൾ

മൾട്ടി-ത്രെഡ് പ്രോഗ്രാമുകൾ കൂടുതൽ കാര്യക്ഷമമായി എഴുതാൻ ഉപയോഗിക്കുന്നു, കൂടാതെ സമന്വയ പ്രശ്നങ്ങൾക്ക് റെഡിമെയ്ഡ് പരിഹാരങ്ങൾ നൽകുന്നു.
സജീവ വസ്തു(ആക്റ്റീവ് ഒബ്ജക്റ്റ്) - ഒരു രീതിയുടെ നിർവ്വഹണത്തിൻ്റെ ത്രെഡ് അത് വിളിച്ച ത്രെഡിൽ നിന്ന് വേർതിരിക്കുന്നതിന് സഹായിക്കുന്നു. ടെംപ്ലേറ്റുകൾ ഉപയോഗിക്കുന്നു അസമന്വിത കോൾരീതികളും ഷെഡ്യൂളറും.
ഡോഡ്ജർ(ബാൽക്കിംഗ്) - ഒരു ഒബ്‌ജക്റ്റ് ശരിയായ അവസ്ഥയിലായിരിക്കുമ്പോൾ മാത്രം അതിൽ ഒരു പ്രവർത്തനം നടത്താൻ സഹായിക്കുന്നു.
പ്രോപ്പർട്ടി ബൈൻഡിംഗ്(ബൈൻഡിംഗ് പ്രോപ്പർട്ടികൾ) - വിവിധ ഒബ്‌ജക്റ്റുകളിലുടനീളമുള്ള പ്രോപ്പർട്ടികളുടെ സമന്വയം ഉറപ്പാക്കാൻ ഒന്നിലധികം നിരീക്ഷകരെ സംയോജിപ്പിക്കുന്നു
സന്ദേശ കൈമാറ്റം(മെസേജിംഗ് ഡിസൈൻ പാറ്റേൺ (എംഡിപി)) - വിവരങ്ങൾ (സന്ദേശങ്ങൾ) കൈമാറാൻ ഘടകങ്ങളെയും ആപ്ലിക്കേഷനുകളെയും അനുവദിക്കുന്നു.
രണ്ടുതവണ ലോക്ക് പരിശോധിക്കുക(ഇരുതവണ പരിശോധിച്ച ലോക്കിംഗ്) - ഒരു ലോക്ക് നേടുന്നതുമായി ബന്ധപ്പെട്ട ഓവർഹെഡ് കുറയ്ക്കുന്നതിന് രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു.
അസമന്വിത ഇവൻ്റുകൾ(ഇവൻ്റ് അടിസ്ഥാനമാക്കിയുള്ള അസമന്വിത) - പ്രശ്നങ്ങൾ പരിഹരിക്കുകഒന്നിലധികം ത്രെഡുകളുള്ള പ്രോഗ്രാമുകളിൽ ഉണ്ടാകുന്ന അസിൻക്രണസ് പാറ്റേൺ ഉപയോഗിച്ച്.
സംരക്ഷിത സസ്പെൻഷൻ(ഗാർഡഡ് സസ്‌പെൻഷൻ) - ഒരു ഒബ്‌ജക്റ്റ് ശരിയായ അവസ്ഥയിലായിരിക്കുമ്പോൾ മാത്രം അത് നടപ്പിലാക്കുന്നത് തടയാൻ ഉപയോഗിക്കുന്നു.
പകുതി സമന്വയം(അർദ്ധ-സമന്വയം/ഹാഫ്-അസിങ്ക്) - ഈ പാറ്റേണിനെക്കുറിച്ച് ഇതുവരെ ഒരു ഡാറ്റയും ഇല്ല.
നേതാക്കൾ(നേതാക്കൾ/അനുയായികൾ) - ഈ പാറ്റേണിനെക്കുറിച്ച് ഇതുവരെ ഒരു ഡാറ്റയും ഇല്ല.
പൂട്ടുക(ലോക്ക്) - മറ്റ് ത്രെഡുകൾ ആക്‌സസ് ചെയ്യുന്നതിൽ നിന്നും മാറ്റുന്നതിൽ നിന്നും തടയുന്നതിന് ഒരു ത്രെഡ് ഒരു റിസോഴ്‌സ് ലോക്ക് ചെയ്യുന്നു.
മോണിറ്റർ(മോണിറ്റർ ഒബ്ജക്റ്റ്) - ഉദ്ദേശിച്ചിട്ടുള്ള ഒരു വസ്തു സുരക്ഷിതമായ ഉപയോഗംഒന്നിലധികം ത്രെഡ്.
റിയാക്ടർ - ഒന്നോ അതിലധികമോ സ്രോതസ്സുകളിൽ നിന്നുള്ള അഭ്യർത്ഥനകളുടെ സിൻക്രണസ് ട്രാൻസ്മിഷൻ വേണ്ടി രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്.
റീഡ്-റൈറ്റ് ലോക്കിംഗ്(റൈറ്റ് റൈറ്റ് ലോക്ക് വായിക്കുക) - പങ്കിട്ട സ്റ്റോറേജിൽ നിന്നുള്ള വിവരങ്ങൾ ഒരേസമയം വായിക്കാൻ ഒന്നിലധികം ത്രെഡുകളെ അനുവദിക്കുന്നു, എന്നാൽ ഒരു സമയം അത് മാറ്റാൻ ഒരു ത്രെഡിനെ മാത്രമേ അനുവദിക്കൂ.
ഷെഡ്യൂളർ(ഷെഡ്യൂളർ) - ഏതെങ്കിലും പ്രത്യേക നയത്തെ ആശ്രയിക്കാതെ ഷെഡ്യൂളിംഗ് പോളിസികൾ നടപ്പിലാക്കുന്നതിനുള്ള ഒരു സംവിധാനം നൽകുന്നു.
ത്രെഡ് പൂൾ(ത്രെഡ് പൂൾ) - പ്രോസസ്സിംഗ് ജോലികൾക്കായി ത്രെഡുകളുടെ ഒരു പൂൾ നൽകുന്നു, സാധാരണയായി ഒരു ക്യൂ രൂപത്തിൽ അവതരിപ്പിക്കുന്നു.
പ്രത്യേക സ്ട്രീം സംഭരണം(ത്രെഡ്-നിർദ്ദിഷ്ട സംഭരണം) - വ്യത്യസ്ത ത്രെഡുകൾക്കായി വ്യത്യസ്ത ആഗോള വേരിയബിളുകൾ നൽകാൻ സഹായിക്കുന്നു.
സിംഗിൾ ത്രെഡ് എക്സിക്യൂഷൻ(സിംഗിൾ ത്രെഡ് എക്സിക്യൂഷൻ) - കൺകറൻ്റ് മെത്തേഡ് ഇൻവോക്കേഷൻ തടയുന്നു, അതുവഴി ഈ രീതിയുടെ സമാന്തര നിർവ്വഹണം നിരോധിക്കുന്നു.
സഹകരണ മാതൃക(സഹകരണ പാറ്റേൺ) - ത്രെഡുകളുടെ അവസാനത്തെ സൂചിപ്പിക്കുന്നതിന് ഒരു പൊതു ഫ്ലാഗ് ഉപയോഗിച്ച്, നിർവ്വഹണത്തിൻ്റെ ത്രെഡുകൾ സുരക്ഷിതമായി നിർത്തുന്നതിനുള്ള ഒരു സംവിധാനം നൽകുന്നു.

സിസ്റ്റം ആർക്കിടെക്ചർ പാറ്റേണുകൾ

മോഡൽ-വ്യൂ-കൺട്രോളർ(MVC) - മോഡൽ-വ്യൂ-കൺട്രോളർ.
മോഡൽ-വ്യൂ-അവതാരകൻ
മോഡൽ-വ്യൂ-വ്യൂ മോഡൽ
അവതരണം-അമൂർത്തീകരണം-നിയന്ത്രണം
നഗ്ന വസ്തുക്കൾ
ഹൈറാർക്കിക്കൽ മോഡൽ–വ്യൂ–കൺട്രോളർ

എൻ്റർപ്രൈസ് ടെംപ്ലേറ്റുകൾ

സജീവ റെക്കോർഡ് - ഡാറ്റ ആക്സസ് ചെയ്യുന്നതിനുള്ള ഒരു മാർഗം റിലേഷണൽ ഡാറ്റാബേസുകൾഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് പ്രോഗ്രാമിംഗിലെ ഡാറ്റ.
ബിസിനസ് ഡെലിഗേറ്റ്
കോമ്പോസിറ്റ് എൻ്റിറ്റി
സംയോജിത കാഴ്ച
DAO (ഡാറ്റ ആക്സസ് ഒബ്ജക്റ്റ്) ഡാറ്റ ആക്സസ് ഒബ്ജക്റ്റ്
ഡിസ്പാച്ചർ കാഴ്ച
ഫ്രണ്ട് കൺട്രോളർ
ഫിൽട്ടർ തടസ്സപ്പെടുത്തുന്നു
രജിസ്ട്രി
സേവന ആക്റ്റിവേറ്റർ
സർവീസ് ലൊക്കേറ്റർ
തൊഴിലാളിക്ക് സേവനം
സെഷൻ ഫേസഡ്/സെഷൻ ഫേസഡ്
ഒബ്ജക്റ്റ് അസംബ്ലർ കൈമാറുക
ഒബ്ജക്റ്റ് കൈമാറുക
മൂല്യ ലിസ്റ്റ് ഹാൻഡ്‌ലർ
സഹായിയെ കാണുക
ജോലിയുടെ യൂണിറ്റ്

മറ്റ് തരത്തിലുള്ള ടെംപ്ലേറ്റുകൾ

ഇന്ന് മറ്റ് നിരവധി ടെംപ്ലേറ്റുകളും ലഭ്യമാണ്.
സംഭരണം(സംഭരണിയാണ്)
കാരിയർ റൈഡർ മാപ്പർസംഭരിച്ച വിവരങ്ങളിലേക്കുള്ള ആക്‌സസ് നൽകുന്ന വിവരണം.
അനലിറ്റിക്കൽ ടെംപ്ലേറ്റുകൾസോഫ്‌റ്റ്‌വെയർ വികസന പ്രക്രിയ ആരംഭിക്കുന്നതിന് മുമ്പായി സോഫ്റ്റ്‌വെയർ ആവശ്യകതകൾ (ആവശ്യങ്ങൾ വിശകലനം) വികസിപ്പിക്കുന്നതിനുള്ള അടിസ്ഥാന സമീപനം വിവരിക്കുക
ആശയവിനിമയ ടെംപ്ലേറ്റുകൾഒരു സ്ഥാപനത്തിലെ വ്യക്തിഗത പങ്കാളികൾ/ജീവനക്കാർ തമ്മിലുള്ള ആശയവിനിമയ പ്രക്രിയ വിവരിക്കുക
ഓർഗനൈസേഷണൽ ടെംപ്ലേറ്റുകൾഎൻ്റർപ്രൈസ്/സ്ഥാപനത്തിൻ്റെ സംഘടനാ ശ്രേണി വിവരിക്കുക
ആൻ്റിപാറ്റേണുകൾ(ആൻ്റി-ഡിസൈൻ-പാറ്റേണുകൾ) പ്രോഗ്രാമുകൾ വികസിപ്പിക്കുമ്പോൾ എന്തുചെയ്യരുതെന്ന് വിവരിക്കുന്നു, കാണിക്കുന്നു സാധാരണ പിശകുകൾരൂപകൽപ്പനയിലും നടപ്പാക്കലിലും

ഡിസൈൻ പാറ്റേണുകൾ എന്താണെന്ന് നിങ്ങൾ എപ്പോഴെങ്കിലും ചിന്തിച്ചിട്ടുണ്ടെങ്കിൽ, സ്വാഗതം. ഈ ലേഖനത്തിൽ ഞാൻ നിങ്ങളോട് പറയും, അവ എന്തൊക്കെയാണ്, എന്തുകൊണ്ട് അവ ആവശ്യമാണ്, അവ എങ്ങനെ ഉപയോഗിക്കണം, കൂടാതെ PHP-യിലെ ഏറ്റവും സാധാരണമായ ടെംപ്ലേറ്റുകളുടെ ഉദാഹരണങ്ങൾ നൽകുക.

ഡിസൈൻ പാറ്റേണുകൾ എന്തൊക്കെയാണ്?

ഡിസൈൻ പാറ്റേണുകൾ തെളിയിക്കപ്പെട്ടതാണ്, പതിവായി നേരിടുന്ന പ്രശ്നങ്ങൾക്ക് ഉപയോഗിക്കാൻ തയ്യാറാണ്. ദൈനംദിന പ്രോഗ്രാമിംഗ്ചുമതലകൾ. ഇത് ഒരു പ്രോജക്‌റ്റുമായി ബന്ധിപ്പിക്കാൻ കഴിയുന്ന ഒരു ക്ലാസോ ലൈബ്രറിയോ അല്ല, അതിലേറെ കാര്യമാണ്. ഓരോ നിർദ്ദിഷ്ട കേസിലും ടാസ്ക്കിന് അനുയോജ്യമായ ഒരു ഡിസൈൻ പാറ്റേൺ നടപ്പിലാക്കുന്നു. കൂടാതെ, ഇത് പ്രോഗ്രാമിംഗ് ഭാഷയിൽ നിന്ന് സ്വതന്ത്രമാണ്. എല്ലാ ഭാഷകളിലും അല്ലെങ്കിലും, ഭാഷയുടെ ആവിഷ്‌കാരതയെ ആശ്രയിച്ച് ഒരു നല്ല പാറ്റേൺ എളുപ്പത്തിൽ നടപ്പിലാക്കാൻ കഴിയും. എന്നിരുന്നാലും, അത്തരമൊരു പാറ്റേൺ തെറ്റായി അല്ലെങ്കിൽ തെറ്റായ പ്രശ്നത്തിലേക്ക് പ്രയോഗിച്ചാൽ, ഒരുപാട് പ്രശ്നങ്ങൾക്ക് കാരണമാകുമെന്ന് ഓർമ്മിക്കേണ്ടതാണ്. എന്നിരുന്നാലും, ശരിയായി പ്രയോഗിച്ച ടെംപ്ലേറ്റ് പ്രശ്നം എളുപ്പത്തിലും ലളിതമായും പരിഹരിക്കാൻ സഹായിക്കും.

മൂന്ന് തരം ടെംപ്ലേറ്റുകൾ ഉണ്ട്:

  • ഘടനാപരമായ;
  • സൃഷ്ടിക്കുന്നു;
  • പെരുമാറ്റം.

ഘടനാപരമായക്ലാസുകളും ഒബ്ജക്റ്റുകളും തമ്മിലുള്ള ബന്ധത്തെ ടെംപ്ലേറ്റുകൾ നിർവചിക്കുന്നു, അവ ഒരുമിച്ച് പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു.

ജനറേറ്റീവ്ടെംപ്ലേറ്റുകൾ ഇനീഷ്യലൈസേഷൻ മെക്കാനിസങ്ങൾ നൽകുന്നു, സൗകര്യപ്രദമായ രീതിയിൽ ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

പെരുമാറ്റംഎൻ്റിറ്റികൾ തമ്മിലുള്ള ഇടപെടലുകൾ ലളിതമാക്കാൻ ടെംപ്ലേറ്റുകൾ ഉപയോഗിക്കുന്നു.

ഡിസൈൻ പാറ്റേണുകൾ ആവശ്യമായിരിക്കുന്നത് എന്തുകൊണ്ട്?

ഒരു ഡിസൈൻ പാറ്റേൺ, അതിൻ്റെ കേന്ദ്രത്തിൽ, ഒരു പ്രത്യേക പ്രശ്നത്തിനുള്ള ചിന്തനീയമായ പരിഹാരമാണ്. നിങ്ങൾക്ക് അറിയാവുന്ന ഒരു പ്രശ്നം നേരിടുകയാണെങ്കിൽ, എന്തുകൊണ്ട് ഉപയോഗിക്കരുത് റെഡിമെയ്ഡ് പരിഹാരം, അനുഭവം തെളിയിച്ചത്?

ഉദാഹരണം

നിങ്ങൾ ചെയ്യുന്ന രണ്ട് ക്ലാസുകൾ സംയോജിപ്പിക്കേണ്ടതുണ്ടെന്ന് സങ്കൽപ്പിക്കുക വിവിധ പ്രവർത്തനങ്ങൾസാഹചര്യം അനുസരിച്ച്. ഈ ക്ലാസുകൾ നിലവിലുള്ള സിസ്റ്റം വളരെയധികം ഉപയോഗിക്കുന്നു, ഇത് അവയിലൊന്ന് നീക്കംചെയ്യുന്നത് അസാധ്യമാക്കുകയും അതിൻ്റെ പ്രവർത്തനം രണ്ടാമത്തേതിലേക്ക് ചേർക്കുകയും ചെയ്യുന്നു. കൂടാതെ, കോഡ് മാറ്റുന്നതിന് സൂക്ഷ്മമായ പരിശോധന ആവശ്യമാണ്, കാരണം അത്തരം പുനർനിർമ്മാണം അനിവാര്യമായ പിശകുകളിലേക്ക് നയിക്കുന്നു. പകരം, നിങ്ങൾക്ക് സ്ട്രാറ്റജിയും അഡാപ്റ്റർ പാറ്റേണുകളും നടപ്പിലാക്കാനും പ്രശ്നം പരിഹരിക്കാൻ അവ ഉപയോഗിക്കാനും കഴിയും.

Class StrategyAndAdapterExampleClass (സ്വകാര്യ $_class_one; സ്വകാര്യ $_class_two; സ്വകാര്യ $_ സന്ദർഭം; പൊതു പ്രവർത്തനം __കൺസ്ട്രക്റ്റ്($ സന്ദർഭം) ($this->_ സന്ദർഭം = $ സന്ദർഭം; ) പൊതു പ്രവർത്തനം പ്രവർത്തനം1() ( if($this->_context == "context_for_c_c ") ($this->_class_one->operation1_in_class_one_context(); ) else ($this->_context == "context_for_class_two") ($this->_class_two->operation1_in_class_two_context)(); ) )

ലളിതം, അല്ലേ? നമുക്ക് സ്ട്രാറ്റജി ടെംപ്ലേറ്റ് കൂടുതൽ വിശദമായി പരിശോധിക്കാം.

ടെംപ്ലേറ്റ് "തന്ത്രം"

തന്ത്രം- വ്യത്യസ്‌ത ക്ലാസുകളിലായി നിരവധി അൽഗോരിതങ്ങൾ സംയോജിപ്പിച്ച് സന്ദർഭത്തിനനുസരിച്ച് നിർവ്വഹണ സമയത്ത് ഒരു പ്രോഗ്രാമിൻ്റെ പെരുമാറ്റം തിരഞ്ഞെടുക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു പെരുമാറ്റ പാറ്റേൺ.

മുകളിലെ ഉദാഹരണത്തിൽ, ഒബ്‌ജക്റ്റ് സൃഷ്‌ടിച്ച സമയത്തെ $ സന്ദർഭ വേരിയബിളിൻ്റെ മൂല്യത്തെ അടിസ്ഥാനമാക്കിയാണ് സ്ട്രാറ്റജി തിരഞ്ഞെടുക്കുന്നത്. മൂല്യം "context_for_class_one" ആണെങ്കിൽ, പ്രോഗ്രാം class_one ഉപയോഗിക്കും. തിരിച്ചും.

ശരി, എന്നാൽ ഇത് എവിടെ ഉപയോഗിക്കാം?

ഒരു ഡാറ്റാബേസിൽ ഒരു റെക്കോർഡ് സൃഷ്‌ടിക്കാനോ അപ്‌ഡേറ്റ് ചെയ്യാനോ കഴിയുന്ന ഒരു ക്ലാസ് നിങ്ങൾ വികസിപ്പിക്കുകയാണെന്ന് സങ്കൽപ്പിക്കുക. രണ്ട് സാഹചര്യങ്ങളിലും ഇൻപുട്ട് പാരാമീറ്ററുകൾഅത് സമാനമായിരിക്കും (പേര്, വിലാസം, ടെലിഫോൺ നമ്പർ മുതലായവ), പക്ഷേ, സാഹചര്യത്തെ ആശ്രയിച്ച്, അവൻ ഉപയോഗിക്കേണ്ടിവരും. വിവിധ പ്രവർത്തനങ്ങൾഅപ്ഡേറ്റ് ചെയ്യാനും ഒരു റെക്കോർഡ് സൃഷ്ടിക്കാനും. നിങ്ങൾക്ക് ഓരോ തവണയും if/else വ്യവസ്ഥ മാറ്റിയെഴുതാം, അല്ലെങ്കിൽ സന്ദർഭം അംഗീകരിക്കുന്ന ഒരു രീതി നിങ്ങൾക്ക് സൃഷ്ടിക്കാം:

ക്ലാസ് ഉപയോക്താവ് (പബ്ലിക് ഫംഗ്‌ഷൻ CreateOrUpdate($name, $address, $mobile, $userid = null) ( if(is_null($userid)) ( // ഉപയോക്താവ് നിലവിലില്ല, ഒരു റെക്കോർഡ് സൃഷ്‌ടിക്കുക) അല്ലെങ്കിൽ ( // റെക്കോർഡ് നിലവിലുണ്ട്, അത് അപ്ഡേറ്റ് ചെയ്യുക)))

സാധാരണഗതിയിൽ, സ്ട്രാറ്റജി പാറ്റേണിൽ ക്ലാസുകളിൽ അൽഗോരിതങ്ങൾ ഉൾപ്പെടുത്തുന്നത് ഉൾപ്പെടുന്നു, എന്നാൽ ഈ സാഹചര്യത്തിൽഇത് അനാവശ്യമാണ്. നിങ്ങൾ വാക്കിന് വേണ്ടി ടെംപ്ലേറ്റ് പിന്തുടരേണ്ടതില്ലെന്ന് ഓർമ്മിക്കുക. പ്രശ്നം പരിഹരിക്കുകയും ആശയവുമായി പൊരുത്തപ്പെടുകയും ചെയ്താൽ ഏത് ഓപ്ഷനുകളും സ്വീകാര്യമാണ്.

അഡാപ്റ്റർ ടെംപ്ലേറ്റ്

അഡാപ്റ്റർ- നടപ്പിലാക്കുന്ന ഒരു ക്ലാസ് ഉപയോഗിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു ഘടനാപരമായ ടെംപ്ലേറ്റ് ആവശ്യമായ പ്രവർത്തനങ്ങൾ, എന്നാൽ അനുചിതമായ ഒരു ഇൻ്റർഫേസ് ഉണ്ട്.

ആന്തരിക ക്ലാസ് ഇൻ്റർഫേസുമായി പൊരുത്തപ്പെടുന്ന തരത്തിൽ ചില ഇൻപുട്ടുകൾ മാറ്റാനും ഇത് നിങ്ങളെ അനുവദിക്കുന്നു.

ഇതെങ്ങനെ ഉപയോഗിക്കണം?

ഒരു അഡാപ്റ്ററിൻ്റെ മറ്റൊരു പേര് "റാപ്പ്" എന്നാണ്. ഇത് ഉപയോഗത്തിനായി ക്ലാസിന് ചുറ്റും പുതിയ ഇൻ്റർഫേസ് "പൊതിഞ്ഞു". ക്ലാസിക് ഉദാഹരണം: നിങ്ങൾ ഒരു ക്ലാസ് സൃഷ്ടിക്കേണ്ടതുണ്ട് വിഷയ മാതൃക, ഡാറ്റാബേസിൽ ഒബ്ജക്റ്റ് ക്ലാസുകൾ ഉള്ളത്. ടേബിൾ ക്ലാസുകൾ നേരിട്ട് ആക്‌സസ് ചെയ്യുന്നതിനും അവയുടെ രീതികൾ ഓരോന്നായി വിളിക്കുന്നതിനുപകരം, നിങ്ങൾക്ക് ഒരു അഡാപ്റ്ററിൽ ഒരൊറ്റ രീതിയിൽ ആ രീതികളിലേക്കുള്ള കോളുകൾ സംയോജിപ്പിക്കാൻ കഴിയും. ഒരു കൂട്ടം പ്രവർത്തനങ്ങൾ പുനരുപയോഗിക്കാൻ ഇത് നിങ്ങളെ അനുവദിക്കുക മാത്രമല്ല, മറ്റെവിടെയെങ്കിലും സമാന പ്രവർത്തനങ്ങൾ നടത്തണമെങ്കിൽ, ധാരാളം കോഡുകൾ നിരന്തരം മാറ്റിയെഴുതുന്നതിൽ നിന്നും ഇത് നിങ്ങളെ രക്ഷിക്കുകയും ചെയ്യും.

രണ്ട് ഉദാഹരണങ്ങൾ താരതമ്യം ചെയ്യുക.

അഡാപ്റ്റർ ഇല്ലാതെ
$user = പുതിയ ഉപയോക്താവ്(); $user->CreateOrUpdate(// parameters); $പ്രൊഫൈൽ = പുതിയ പ്രൊഫൈൽ(); $profile->CreateOrUpdate(// parameters);

അത്തരം കോഡ് വീണ്ടും ഉപയോഗിക്കേണ്ടി വന്നാൽ, മുഴുവൻ കാര്യങ്ങളും മാറ്റിയെഴുതാൻ ഞങ്ങൾ നിർബന്ധിതരാകും.

ഒരു അഡാപ്റ്റർ ഉപയോഗിക്കുന്നു

ഞങ്ങൾക്ക് ഒരു അക്കൗണ്ട് റാപ്പർ ക്ലാസ് സൃഷ്ടിക്കാൻ കഴിയും:

ക്ലാസ് അക്കൗണ്ട്() ( പൊതു പ്രവർത്തനം NewAccount(// parameters) ($user = new User(); $user->CreateOrUpdate(// പരാമീറ്ററുകളുടെ ഭാഗം); $profile = പുതിയ പ്രൊഫൈൽ(); $profile->CreateOrUpdate( // ചില പാരാമീറ്ററുകൾ); ) ) $account_domain = പുതിയ അക്കൗണ്ട്(); $account_domain->NewAccount(// parameters);

ഇപ്പോൾ നമുക്ക് ഓരോ തവണയും അക്കൗണ്ട് ക്ലാസ് ഉപയോഗിക്കാനും കൂടാതെ അധിക ഫംഗ്‌ഷണാലിറ്റി ചേർക്കാനും കഴിയും.

ഫാക്ടറി രീതി ടെംപ്ലേറ്റ്

ഫാക്ടറി- ഒരു ജനറേറ്റിംഗ് ടെംപ്ലേറ്റ്, ഇത് വിവിധ ഒബ്‌ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു രീതിയുള്ള ഒരു ക്ലാസാണ്.

ഈ പാറ്റേണിൻ്റെ പ്രധാന ലക്ഷ്യം ഒരൊറ്റ ഫംഗ്ഷനിൽ വിവിധ ക്ലാസുകൾ സൃഷ്ടിക്കുന്നതിനുള്ള നടപടിക്രമം ഉൾക്കൊള്ളിക്കുക എന്നതാണ്, അത് അതിലേക്ക് കടന്നുപോകുന്ന സന്ദർഭത്തെ ആശ്രയിച്ച്, ആവശ്യമായ ഒബ്ജക്റ്റ് നൽകുന്നു.

ഇതെങ്ങനെ ഉപയോഗിക്കണം?

ഒരു അടിസ്ഥാന ക്ലാസിൻ്റെ വ്യത്യസ്ത വകഭേദങ്ങൾ സൃഷ്ടിക്കാൻ ഒരു ഫാക്ടറി സാധാരണയായി ഉപയോഗിക്കുന്നു. നിങ്ങൾക്ക് ഒരു ബട്ടൺ ക്ലാസ് ഉണ്ടെന്ന് പറയാം - ബട്ടൺ - കൂടാതെ ഇമേജ് ബട്ടൺ, ഇൻപുട്ട് ബട്ടൺ, ഫ്ലാഷ് ബട്ടൺ എന്നീ മൂന്ന് ഓപ്ഷനുകൾ. ഒരു ഫാക്ടറി ഉപയോഗിച്ച് നിങ്ങൾക്ക് സൃഷ്ടിക്കാൻ കഴിയും വിവിധ ഓപ്ഷനുകൾസാഹചര്യം അനുസരിച്ച് ബട്ടണുകൾ.

ആദ്യം, നമുക്ക് മൂന്ന് ക്ലാസുകൾ സൃഷ്ടിക്കാം:

അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസ് ബട്ടൺ (പരിരക്ഷിത $_html; പബ്ലിക് ഫംഗ്‌ഷൻ getHtml() ($this->_html തിരികെ നൽകുക; ) ) ക്ലാസ് ഇമേജ് ബട്ടൺ വിപുലീകരിക്കുന്ന ബട്ടൺ ( സംരക്ഷിത $_html = "..."; // ഇമേജ് ബട്ടണിൻ്റെ // HTML കോഡ്) ക്ലാസ് ഇൻപുട്ട് ബട്ടൺ വിപുലീകരിക്കുന്നു ബട്ടൺ ( സംരക്ഷിത $_html = "..."; // ഒരു സാധാരണ ബട്ടണിനുള്ള HTML കോഡ് ( ); ) ക്ലാസ് FlashButton വിപുലീകരിക്കുന്ന ബട്ടൺ ( സംരക്ഷിത $_html = "..."; // ഫ്ലാഷ് ബട്ടണിൻ്റെ HTML കോഡ്)

ഇപ്പോൾ നമുക്ക് ഞങ്ങളുടെ ഫാക്ടറി എഴുതാം:

Class ButtonFactory (പബ്ലിക് സ്റ്റാറ്റിക് ഫംഗ്‌ഷൻ createButton($type) ($baseClass = "Button"; $targetClass = ucfirst($type).$baseClass; എങ്കിൽ (class_exist($targetClass) && is_subclass_of($targetClass) $base) പുതിയ $targetClass; ) വേറെ (പുതിയ ഒഴിവാക്കൽ ("ബട്ടൺ തരം "$ടൈപ്പ്" തിരിച്ചറിഞ്ഞിട്ടില്ല."); ) )

കൂടാതെ അത് ഉപയോഗിക്കുക:

$ബട്ടണുകൾ = അറേ ("ചിത്രം", "ഇൻപുട്ട്", "ഫ്ലാഷ്"); foreach($btons as $b) ( echo ButtonFactory ::createButton($b)->getHtml() )

എല്ലാത്തരം ബട്ടണുകളുമുള്ള ഔട്ട്‌പുട്ട് HTML ആയിരിക്കണം. ഇതുവഴി ഏത് തരത്തിലുള്ള ബട്ടണാണ് ഞങ്ങൾക്ക് വേണ്ടതെന്ന് വ്യക്തമാക്കാനും കോഡ് വീണ്ടും ഉപയോഗിക്കാനും ഞങ്ങൾക്ക് കഴിഞ്ഞു.

ഡെക്കറേറ്റർ ടെംപ്ലേറ്റ്

അലങ്കാരപ്പണിക്കാരൻഒരു ഘടനാപരമായ പാറ്റേണാണ്, അത് സാഹചര്യത്തെ ആശ്രയിച്ച്, പ്രോഗ്രാം എക്സിക്യൂഷൻ സമയത്ത് ഒരു ഒബ്ജക്റ്റിലേക്ക് പുതിയ സ്വഭാവം ചേർക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

അടിസ്ഥാന ക്ലാസിൻ്റെ സ്വഭാവം മാറ്റാതെ തന്നെ ഒരു പ്രത്യേക വസ്തുവിൻ്റെ സ്വഭാവം വിപുലീകരിക്കുക എന്നതാണ് ലക്ഷ്യം. ഒരേ സമയം ഒന്നിലധികം അലങ്കാരങ്ങൾ ഉപയോഗിക്കാൻ ഇത് നിങ്ങളെ അനുവദിക്കും. ഈ പാറ്റേൺ പാരമ്പര്യത്തിന് പകരമാണ്. പാരമ്പര്യത്തിൽ നിന്ന് വ്യത്യസ്തമായി, ഒരു ഡെക്കറേറ്റർ പ്രോഗ്രാം നിർവ്വഹണ സമയത്ത് പെരുമാറ്റം ചേർക്കുന്നു.

ഡെക്കറേറ്റർ നടപ്പിലാക്കാൻ ഞങ്ങൾക്ക് ഇത് ആവശ്യമാണ്:

  1. ബേസ് ഒന്നിൽ നിന്ന് ഡെക്കറേറ്റർ ക്ലാസ് അവകാശമാക്കുക.
  2. ഒരു ലിങ്കുള്ള ഒരു ഫീൽഡ് ചേർക്കുക അടിസ്ഥാന ക്ലാസ്അലങ്കാരപ്പണിക്കാരിൽ.
  3. അലങ്കരിക്കേണ്ട വസ്തുവിനെക്കുറിച്ചുള്ള ഒരു റഫറൻസ് ഡെക്കറേറ്റർ കൺസ്ട്രക്റ്റർക്ക് കൈമാറുക.
  4. ഡെക്കറേറ്ററിൽ നിന്ന് അലങ്കരിച്ച ഒബ്‌ജക്‌റ്റിലേക്ക് വഴിതിരിച്ചുവിടുന്ന രീതികൾ.
  5. നിങ്ങൾ മാറ്റാൻ ആഗ്രഹിക്കുന്ന ഡെക്കറേറ്ററിലെ രീതികൾ അസാധുവാക്കുക.

ഇതെങ്ങനെ ഉപയോഗിക്കണം?

ഒരു പ്രത്യേക സാഹചര്യത്തിൽ ഒരു പ്രത്യേക സ്വഭാവം ഉണ്ടായിരിക്കേണ്ട ഒരു വസ്തു നമുക്കുണ്ടെന്ന് പറയാം. ഉദാഹരണത്തിന്, നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് ലോഗ് ഔട്ട് ചെയ്യാൻ ഞങ്ങൾക്ക് ഒരു HTML ലിങ്ക് ഉണ്ട്, അത് ഞങ്ങൾ ഏത് പേജിലാണ് എന്നതിനെ ആശ്രയിച്ച് വ്യത്യസ്തമായി ദൃശ്യമാകും. അലങ്കാരപ്പണിക്കാർ ഞങ്ങളെ സഹായിക്കുന്ന സന്ദർഭമാണിത്.

ആദ്യം, നമുക്ക് എന്ത് "ദൃശ്യങ്ങൾ" വേണമെന്ന് തീരുമാനിക്കാം:

  • ഞങ്ങൾ പ്രധാന പേജിലാണെങ്കിൽ ലോഗിൻ ചെയ്തിട്ടുണ്ടെങ്കിൽ, ലിങ്ക് h2 ടാഗിൽ ആയിരിക്കണം.
  • ഞങ്ങൾ മറ്റേതെങ്കിലും പേജിലാണെങ്കിൽ ലോഗിൻ ചെയ്തിട്ടുണ്ടെങ്കിൽ, ലിങ്ക് അടിവരയിടണം.
  • നമ്മൾ ലോഗിൻ ചെയ്തിട്ടുണ്ടെങ്കിൽ, ലിങ്ക് ശക്തമായ ടാഗിൽ ആയിരിക്കണം.

ഇപ്പോൾ നമുക്ക് അലങ്കാരക്കാരെ സ്വയം എഴുതാം:

ക്ലാസ് HtmlLinks ( // ഏതെങ്കിലും HTML ലിങ്ക് ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നതിനുള്ള രീതികൾ) ക്ലാസ് LogoutLink HtmlLinks വിപുലീകരിക്കുന്നു ( സംരക്ഷിത $_html; പൊതു പ്രവർത്തനം __കൺസ്ട്രക്റ്റ്() ($this->_html = "Logout"; ) പൊതു പ്രവർത്തനം setHtml($html) ($this - >_html = $html; ) പബ്ലിക് ഫംഗ്‌ഷൻ റെൻഡർ() (എക്കോ $this->_html; ) ) ക്ലാസ് LogoutLinkH2Decorator HtmlLinks വിപുലീകരിക്കുന്നു ($_logout_link; പൊതു പ്രവർത്തനം __കൺസ്ട്രക്റ്റ്($logout_link) ($this- => $logout_link) ->setHtml("" . $this->_html . ""); ) പൊതു പ്രവർത്തനം __call($name, $args) ($this->_logout_link->$name($args); ) ) ക്ലാസ് LogoutLinkUnderlineDecorator HtmlLinks വിപുലീകരിക്കുന്നു ( സംരക്ഷിത $_logout_link; പൊതു പ്രവർത്തനം __കൺസ്ട്രക്റ്റ് ($logout_link) ($this->_logout_link = $logout_link; $this->setHtml("" . $this->_html . ""); ) പൊതു പ്രവർത്തനം __call($name, $ args ) ($this->_logout_link->$name($args); ) ) ക്ലാസ് LogoutLinkStrongDecorator HtmlLinks വിപുലീകരിക്കുന്നു ( സംരക്ഷിത $_logout_link; പൊതു പ്രവർത്തനം __കൺസ്ട്രക്റ്റ് ($logout_link) ($this->_logout_link = $logout_link; $this->setHtml("" . $this->_html . ""); ) പൊതു പ്രവർത്തനം __call ($name, $args) ($this->_logout_link->$name($args); ) )

ഇപ്പോൾ നമുക്ക് അവ ഇതുപോലെ ഉപയോഗിക്കാം:

$logout_link = പുതിയ LogoutLink(); if($is_logged_in) ($logout_link = പുതിയ LogoutLinkStrongDecorator($logout_link); ) if($in_home_page) ($logout_link = പുതിയ LogoutLinkH2Decorator($logout_link); ) else ($logout_link = പുതിയ LogoutlinkDLink_); >റെൻഡർ();

ഒരേ ഒബ്‌ജക്‌റ്റിൽ ഒന്നിലധികം അലങ്കാരങ്ങൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ശ്രദ്ധിക്കുക. അവയെല്ലാം യഥാർത്ഥ രീതിയെ വിളിക്കാൻ __കോൾ ഫംഗ്‌ഷൻ ഉപയോഗിക്കുന്നു. നമ്മുടെ അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്‌ത് ഹോം പേജിലേക്ക് പോയാൽ, ഫലം ഇതുപോലെയായിരിക്കും:

പുറത്തുകടക്കുക

ടെംപ്ലേറ്റ് "ഒറ്റ"

ഏകാകി- പ്രോഗ്രാം നിർവ്വഹണ വേളയിൽ ഗ്ലോബൽ ആക്‌സസ് ഉള്ള ഒരു ക്ലാസ്സിൻ്റെ ഒരു ഉദാഹരണം മാത്രമേ സൃഷ്ടിക്കപ്പെട്ടിട്ടുള്ളൂ എന്ന് ഉറപ്പാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു ജനറേറ്റിംഗ് പാറ്റേൺ.

സിംഗിൾടൺ ഫീൽഡുകൾ വിളിക്കുന്ന എല്ലാവർക്കും ഒരുപോലെ ആയിരിക്കുമെന്നതിനാൽ, മറ്റ് ഒബ്‌ജക്‌റ്റുകൾക്കായുള്ള ഒരു "കോർഡിനേഷൻ" പോയിൻ്റായി ഇത് ഉപയോഗിക്കാം.

ഇതെങ്ങനെ ഉപയോഗിക്കണം?

നിങ്ങൾക്ക് ക്ലാസിൽ നിന്ന് ക്ലാസിലേക്ക് ഒരു നിർദ്ദിഷ്ട ഉദാഹരണം കൈമാറണമെങ്കിൽ, ഓരോ തവണയും ഒരു കൺസ്ട്രക്റ്റർ വഴി നിങ്ങൾക്ക് അത് കൈമാറാം അല്ലെങ്കിൽ സിംഗിൾടൺ ഉപയോഗിക്കുക. നിലവിലെ സെഷനെക്കുറിച്ചുള്ള ഡാറ്റ അടങ്ങുന്ന ഒരു സെഷൻ ക്ലാസ് നിങ്ങൾക്കുണ്ടെന്ന് പറയാം. സെഷൻ ഒരു തവണ മാത്രമേ ആരംഭിച്ചിട്ടുള്ളൂ എന്നതിനാൽ, ഞങ്ങൾക്ക് ഇത് ഇതുപോലെ നടപ്പിലാക്കാൻ കഴിയും:

ക്ലാസ് സെഷൻ (പ്രൈവറ്റ് സ്റ്റാറ്റിക് $instance; പബ്ലിക് സ്റ്റാറ്റിക് ഫംഗ്‌ഷൻ getInstance() (if(is_null(self::$instance)) (self::$instance = new self(); ) return self::$instance; ) private function __construct () ( ) പ്രൈവറ്റ് ഫംഗ്ഷൻ __clone() ( ) // മറ്റ് സെഷൻ രീതികൾ... ... ... ) // ഒരു സെഷൻ ഉദാഹരണം നേടുക $session = Session ::getInstance();

ഇപ്പോൾ കോഡിൻ്റെ വിവിധ ഭാഗങ്ങളിൽ നിന്ന്, മറ്റ് ക്ലാസുകളിൽ നിന്ന് പോലും നമുക്ക് സെഷൻ ആക്സസ് ചെയ്യാൻ കഴിയും. getInstance രീതി എല്ലായ്പ്പോഴും ഒരേ സെഷൻ നൽകും.

ഉപസംഹാരം

ഈ ലേഖനത്തിൽ, പലതിൽ നിന്നും ഏറ്റവും സാധാരണമായ പാറ്റേണുകൾ മാത്രമാണ് ഞങ്ങൾ നോക്കിയത്. നിങ്ങൾക്ക് ഡിസൈൻ പാറ്റേണുകളെ കുറിച്ച് കൂടുതലറിയണമെങ്കിൽ, വിക്കിപീഡിയയിൽ നിങ്ങൾക്ക് ധാരാളം വിവരങ്ങൾ കാണാം. കൂടുതൽ പൂർണ്ണമായ വിവരങ്ങൾഗാംഗ് ഓഫ് ഫോർ എഴുതിയ "ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് ഡിസൈൻ ടെക്നിക്സ്" എന്ന പ്രശസ്തമായ പുസ്തകം നോക്കൂ.

അവസാനമായി: ഈ അല്ലെങ്കിൽ ആ ടെംപ്ലേറ്റ് ഉപയോഗിക്കുമ്പോൾ, നിങ്ങൾ പ്രശ്നം പരിഹരിച്ചുവെന്ന് ഉറപ്പാക്കുക ശരിയായ വഴി. സൂചിപ്പിച്ചതുപോലെ, തെറ്റായി ഉപയോഗിച്ചാൽ, ഡിസൈൻ പാറ്റേണുകൾ കാരണമാകാം കൂടുതൽ പ്രശ്നങ്ങൾതീരുമാനിക്കുന്നതിനേക്കാൾ. എന്നാൽ ശരിയായി ചെയ്യുകയാണെങ്കിൽ, അവരുടെ നേട്ടങ്ങൾ അമിതമായി കണക്കാക്കാൻ കഴിയില്ല.

അവസാനം അപ്ഡേറ്റ് ചെയ്തത്: 10/31/2015

ഡിസൈൻ പാറ്റേണുകൾ എന്തൊക്കെയാണ്? ഒരു പാറ്റേൺ ഒരു പ്രത്യേക നിർമ്മാണ രീതിയെ പ്രതിനിധീകരിക്കുന്നു പ്രോഗ്രാം കോഡ്പൊതുവായ ഡിസൈൻ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ. ഈ സാഹചര്യത്തിൽ, പലപ്പോഴും സംഭവിക്കുന്ന പൊതുവായ ഔപചാരിക പ്രശ്നങ്ങൾ ഒരു നിശ്ചിത സെറ്റ് ഉണ്ടെന്ന് അനുമാനിക്കപ്പെടുന്നു, കൂടാതെ ഈ പ്രശ്നങ്ങൾ പരിഹരിക്കുന്നതിനുള്ള ഒരു കൂട്ടം തത്വങ്ങൾ പാറ്റേണുകൾ നൽകുന്നു.

സാധാരണ ഡിസൈൻ പ്രശ്നങ്ങൾക്കുള്ള പരിഹാരങ്ങൾ വിവരിക്കുന്നതിനുള്ള ഒരു മാർഗമെന്ന നിലയിൽ പാറ്റേണുകൾ എന്ന ആശയം വളരെക്കാലം മുമ്പ് പ്രത്യക്ഷപ്പെട്ടിരുന്നുവെങ്കിലും, അവയുടെ ജനപ്രീതി പ്രധാനമായും വളരാൻ തുടങ്ങിയത് പ്രശസ്തമായ പ്രവൃത്തിനാല് രചയിതാക്കൾ എറിക് ഗാമ, റിച്ചാർഡ് ഹെൽം, റാൽഫ് ജോൺസൺ, ജോൺ വ്ലിസൈഡ്സ്, "ഡിസൈൻ പാറ്റേണുകൾ: പുനരുപയോഗിക്കാവുന്ന ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് സോഫ്‌റ്റ്‌വെയറിൻ്റെ ഘടകങ്ങൾ" (റഷ്യൻ ഭാഷയിൽ "ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് ഡിസൈൻ ടെക്നിക്സ്. ഡിസൈൻ പാറ്റേണുകൾ" എന്ന് അറിയപ്പെടുന്നു) എന്ന പേരിൽ ഇത് പ്രസിദ്ധീകരിച്ചു. 1994. രചയിതാക്കളുടെ ടീമിനെ തന്നെ പലപ്പോഴും "ഗ്യാംഗ് ഓഫ് ഫോർ" അല്ലെങ്കിൽ ഗാംഗ് ഓഫ് ഫോർ അല്ലെങ്കിൽ ചുരുക്കത്തിൽ GoF എന്ന് വിളിക്കുന്നു. പ്രോഗ്രാം രൂപകല്പനയുടെ പൊതുവായ രീതികൾ വിവരിക്കുന്നതിനുള്ള ആദ്യത്തെ വലിയ തോതിലുള്ള ശ്രമമായിരുന്നു ഈ പുസ്തകം. കാലക്രമേണ, പാറ്റേണുകളുടെ ഉപയോഗം നല്ല പ്രോഗ്രാമിംഗ് പരിശീലനമായി കണക്കാക്കാൻ തുടങ്ങി.

പാറ്റേണുകളുടെ ഉപയോഗം നമുക്ക് എന്താണ് നൽകുന്നത്? പ്രോഗ്രാമുകൾ എഴുതുമ്പോൾ, ക്ലാസുകളുടെയും വസ്തുക്കളുടെയും അവ തമ്മിലുള്ള ബന്ധങ്ങളുടെയും രൂപത്തിൽ പ്രശ്നം ഔപചാരികമാക്കാം. അത് പരിഹരിക്കാൻ നിലവിലുള്ള പാറ്റേണുകളിൽ ഒന്ന് പ്രയോഗിക്കുക. തൽഫലമായി, ഞങ്ങൾ ഒന്നും കണ്ടുപിടിക്കേണ്ടതില്ല. ഞങ്ങൾക്ക് ഇതിനകം ഒരു റെഡിമെയ്ഡ് ടെംപ്ലേറ്റ് ഉണ്ട്, ഞങ്ങൾ അത് ഒരു നിർദ്ദിഷ്ട പ്രോഗ്രാമിൽ പ്രയോഗിക്കേണ്ടതുണ്ട്.

മാത്രമല്ല, പാറ്റേണുകൾ, ഒരു ചട്ടം പോലെ, പ്രോഗ്രാമിംഗ് ഭാഷയെ ആശ്രയിക്കുന്നില്ല. അവരുടെ പ്രയോഗ തത്വങ്ങൾ C#, Jave, കൂടാതെ മറ്റ് ഭാഷകളിലും സമാനമായിരിക്കും. ഈ ഗൈഡിനുള്ളിൽ ഞങ്ങൾ സി# ഭാഷയുടെ പശ്ചാത്തലത്തിൽ പാറ്റേണുകളെക്കുറിച്ച് സംസാരിക്കും.

പാറ്റേണുകളിൽ ചിന്തിക്കുന്നത് ഗ്രൂപ്പുകളിൽ പ്രോഗ്രാമുകൾ വികസിപ്പിക്കുന്നത് എളുപ്പമാക്കുന്നു. ഉപയോഗിച്ച ഡിസൈൻ പാറ്റേണും അതിൻ്റെ അടിസ്ഥാന തത്വങ്ങളും അറിയുന്നത് മറ്റൊരു പ്രോഗ്രാമർക്ക് അതിൻ്റെ നടപ്പാക്കൽ മനസ്സിലാക്കാനും ഉപയോഗിക്കാനും എളുപ്പമാക്കും.

അതേ സമയം, പാറ്റേണുകൾക്കായി നിങ്ങൾ പാറ്റേണുകൾ ഉപയോഗിക്കരുത്. നല്ല പരിപാടിപാറ്റേണുകളുടെ ഉപയോഗം ഉൾപ്പെടുന്നു. എന്നിരുന്നാലും, പാറ്റേണുകൾ എല്ലായ്പ്പോഴും പ്രോഗ്രാം ലളിതമാക്കുകയും മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നില്ല. അവരുടെ അന്യായമായ ഉപയോഗം പ്രോഗ്രാം കോഡിൻ്റെ സങ്കീർണ്ണതയ്ക്കും അതിൻ്റെ ഗുണനിലവാരം കുറയുന്നതിനും ഇടയാക്കും. പാറ്റേൺ ന്യായീകരിക്കുകയും വേണം ഫലപ്രദമായ വഴിപ്രശ്നം പരിഹരിക്കുന്നു.

പരിഹരിക്കുന്ന നിരവധി വ്യത്യസ്ത പാറ്റേണുകൾ ഉണ്ട് വ്യത്യസ്ത പ്രശ്നങ്ങൾനിർവഹിക്കുകയും ചെയ്യുന്നു വിവിധ ജോലികൾ. എന്നാൽ അവരുടെ പ്രവർത്തനമനുസരിച്ച്, അവയെ നിരവധി ഗ്രൂപ്പുകളായി കൂട്ടിച്ചേർക്കാം. പാറ്റേണുകളുടെ ചില ഗ്രൂപ്പുകൾ നോക്കാം. അടിസ്ഥാന പാറ്റേണുകളുടെ വർഗ്ഗീകരണം ഒരു പ്രത്യേക പാറ്റേൺ നിർവ്വഹിക്കുന്ന ഉദ്ദേശ്യത്തെയോ ചുമതലകളെയോ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.

ജനറേറ്റീവ് പാറ്റേണുകൾ

ജനറേറ്റീവ് പാറ്റേണുകൾ തൽക്ഷണ പ്രക്രിയയെ അമൂർത്തമായ പാറ്റേണുകളാണ് അല്ലെങ്കിൽ മറ്റൊരു രീതിയിൽ പറഞ്ഞാൽ, ക്ലാസുകളും ഒബ്ജക്റ്റുകളും സൃഷ്ടിക്കുന്ന പ്രക്രിയ. അവയിൽ ഇനിപ്പറയുന്നവ വേറിട്ടുനിൽക്കുന്നു:

    ബിൽഡർ

    പ്രോട്ടോടൈപ്പ്

    സിംഗിൾടൺ

മറ്റൊരു കൂട്ടം പാറ്റേണുകൾ - ഘടനാപരമായ പാറ്റേണുകൾ- ക്ലാസുകളും ഒബ്‌ജക്‌റ്റുകളും എങ്ങനെയാണ് വലിയ ഘടനകൾ ഉണ്ടാക്കുന്നതെന്ന് പരിശോധിക്കുന്നു - ക്ലാസുകളും പ്രകൃതിയിൽ കൂടുതൽ സങ്കീർണ്ണമായ വസ്തുക്കളും. ഈ ടെംപ്ലേറ്റുകളിൽ ഇവ ഉൾപ്പെടുന്നു:

    അഡാപ്റ്റർ

    പാലം

    സംയുക്തം

    അലങ്കാരപ്പണിക്കാരൻ

    മുഖച്ഛായ

    ഫ്ലൈവെയ്റ്റ്

    ഡെപ്യൂട്ടി (പ്രോക്സി)

മൂന്നാമത്തെ ഗ്രൂപ്പ് പാറ്റേണുകളെ ബിഹേവിയറൽ എന്ന് വിളിക്കുന്നു - അവ അൽഗോരിതങ്ങളും ക്ലാസുകളും ഒബ്‌ജക്റ്റുകളും തമ്മിലുള്ള ഇടപെടലുകളും നിർവചിക്കുന്നു, അതായത് അവയുടെ സ്വഭാവം. അത്തരം ടെംപ്ലേറ്റുകളിൽ ഇനിപ്പറയുന്നവ ഉൾപ്പെടുന്നു:

    കമാൻഡ്

    വ്യാഖ്യാതാവ്

    ഇറ്ററേറ്റർ

    മധ്യസ്ഥൻ

    ഗാർഡിയൻ (മെമൻ്റോ)

    നിരീക്ഷകൻ

    സംസ്ഥാനം

    തന്ത്രം

    ടെംപ്ലേറ്റ് രീതി

    സന്ദർശകൻ

പാറ്റേൺ ക്ലാസുകളുടേതോ ഒബ്‌ജക്റ്റുകളുടേതോ എന്നതിനെ ആശ്രയിച്ച് പാറ്റേണുകളുടെ മറ്റ് വർഗ്ഗീകരണങ്ങളുണ്ട്.

ക്ലാസ് പാറ്റേണുകൾ പാരമ്പര്യത്തിലൂടെ ക്ലാസുകൾ തമ്മിലുള്ള ബന്ധത്തെ വിവരിക്കുന്നു. ക്ലാസുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ കംപൈൽ സമയത്ത് നിർണ്ണയിക്കപ്പെടുന്നു. ഈ പാറ്റേണുകളിൽ ഇവ ഉൾപ്പെടുന്നു:

    ഫാക്ടറി രീതി

    വ്യാഖ്യാതാവ്

    ടെംപ്ലേറ്റ് രീതി

    അഡാപ്റ്റർ

പാറ്റേണുകളുടെ മറ്റൊരു ഭാഗം - ഒബ്ജക്റ്റ് പാറ്റേണുകൾവസ്തുക്കൾ തമ്മിലുള്ള ബന്ധം വിവരിക്കുക. ഈ ബന്ധങ്ങൾ റൺടൈമിൽ സംഭവിക്കുന്നു, അതിനാൽ കൂടുതൽ വഴക്കമുള്ളവയാണ്. ഒബ്ജക്റ്റ് പാറ്റേണുകളിൽ ഇനിപ്പറയുന്നവ ഉൾപ്പെടുന്നു:

    അമൂർത്തമായ ഫാക്ടറി

    ബിൽഡർ

    പ്രോട്ടോടൈപ്പ്

    സിംഗിൾടൺ

    പാലം

    സംയുക്തം

    അലങ്കാരപ്പണിക്കാരൻ

    മുഖച്ഛായ

    ഫ്ലൈവെയ്റ്റ്

    ഡെപ്യൂട്ടി (പ്രോക്സി)

    ഉത്തരവാദിത്ത ശൃംഖല

    കമാൻഡ്

    ഇറ്ററേറ്റർ

    മധ്യസ്ഥൻ

    ഗാർഡിയൻ (മെമൻ്റോ)

    നിരീക്ഷകൻ

    സംസ്ഥാനം

    തന്ത്രം

    സന്ദർശകൻ

കൂടാതെ ഇവ ചില പ്രധാന പാറ്റേണുകൾ മാത്രമാണ്. പൊതുവേ, നിരവധി വ്യത്യസ്ത ഡിസൈൻ പാറ്റേണുകൾ ഉണ്ട്. അവയിൽ ചിലത് ഇപ്പോൾ ഉപയോഗിക്കാൻ തുടങ്ങിയിരിക്കുന്നു, മറ്റുള്ളവ നിലവിൽ ജനപ്രിയമാണ്, ചിലത് മുമ്പത്തേതിനേക്കാൾ കുറവാണ്.

ഒപ്പം അകത്തും ഈ മാനുവൽ C# ഭാഷയുമായി ബന്ധപ്പെട്ട് അവയുടെ ഉപയോഗത്തിൻ്റെ ഏറ്റവും അടിസ്ഥാനപരവും പൊതുവായതുമായ പാറ്റേണുകളും തത്വങ്ങളും ഞങ്ങൾ നോക്കും.

ശരിയായ പാറ്റേൺ എങ്ങനെ തിരഞ്ഞെടുക്കാം?

ഒന്നാമതായി, ഒരു പ്രശ്നം പരിഹരിക്കുമ്പോൾ, നിങ്ങൾ ഉപയോഗിച്ച എല്ലാ എൻ്റിറ്റികളും അവ തമ്മിലുള്ള കണക്ഷനുകളും തിരിച്ചറിയുകയും പ്രത്യേക സാഹചര്യത്തിൽ നിന്ന് അവയെ സംഗ്രഹിക്കുകയും വേണം. അപ്പോൾ പ്രശ്നം പരിഹരിക്കുന്നതിനുള്ള അമൂർത്തമായ രൂപം ഒരു പ്രത്യേക പാറ്റേണിലേക്ക് യോജിക്കുന്നുണ്ടോ എന്ന് നിങ്ങൾ കാണേണ്ടതുണ്ട്. ഉദാഹരണത്തിന്, പരിഹരിക്കപ്പെടുന്ന പ്രശ്നത്തിൻ്റെ സാരാംശം പുതിയ വസ്തുക്കളുടെ സൃഷ്ടിയായിരിക്കാം. ഈ സാഹചര്യത്തിൽ, ജനറേറ്റീവ് പാറ്റേണുകൾ നോക്കുന്നത് മൂല്യവത്താണ്. മാത്രമല്ല, ഒരു നിർദ്ദിഷ്ട പാറ്റേൺ ഉടനടി എടുക്കാതിരിക്കുന്നതാണ് നല്ലത് - ആദ്യത്തേത് ആവശ്യമാണെന്ന് തോന്നുന്നു, എന്നാൽ ഒരേ ഗ്രൂപ്പിൽ നിന്ന് ഒരേ പ്രശ്നം പരിഹരിക്കുന്ന നിരവധി അനുബന്ധ പാറ്റേണുകൾ നോക്കുക.

അതേ സമയം, പാറ്റേണിൻ്റെ അർത്ഥവും ഉദ്ദേശ്യവും മനസിലാക്കേണ്ടത് പ്രധാനമാണ്, അതിൻ്റെ അമൂർത്തമായ ഓർഗനൈസേഷനും അതിൻ്റെ സാധ്യമായ കോൺക്രീറ്റ് നടപ്പാക്കലുകളും വ്യക്തമായി പ്രതിനിധീകരിക്കുക. ഒരു പാറ്റേണിൽ വ്യത്യസ്‌ത നിർവ്വഹണങ്ങൾ ഉണ്ടാകാം, കൂടുതൽ തവണ നിങ്ങൾ ഈ നിർവ്വഹണങ്ങൾ നേരിടുമ്പോൾ, പാറ്റേണിൻ്റെ അർത്ഥം നിങ്ങൾ നന്നായി മനസ്സിലാക്കും. എന്നാൽ ഒറ്റനോട്ടത്തിൽ പ്രശ്നം പരിഹരിക്കാൻ നിങ്ങളെ സഹായിക്കുകയാണെങ്കിൽപ്പോലും, നിങ്ങൾക്കത് മനസ്സിലാകുന്നില്ലെങ്കിൽ നിങ്ങൾ ഒരു പാറ്റേൺ ഉപയോഗിക്കരുത്.

ആത്യന്തികമായി, നമ്മൾ KISS തത്വം പാലിക്കണം (ഇത് ലളിതവും മണ്ടത്തരവും നിലനിർത്തുക) - പ്രോഗ്രാം കോഡ് കഴിയുന്നത്ര ലളിതവും വ്യക്തവുമായി സൂക്ഷിക്കുക. എല്ലാത്തിനുമുപരി, പാറ്റേണുകളുടെ പോയിൻ്റ് പ്രോഗ്രാം കോഡ് സങ്കീർണ്ണമാക്കുകയല്ല, മറിച്ച് അത് ലളിതമാക്കുക എന്നതാണ്.

അവയുടെ കേന്ദ്രത്തിൽ, പാറ്റേണുകളാണ് സാധാരണ ടെംപ്ലേറ്റുകൾഡിസൈൻ. സാധാരണ ആർക്കിടെക്റ്റുകളിൽ നിന്ന് (കെട്ടിടങ്ങൾ കൈകാര്യം ചെയ്യുന്നവർ) കടമെടുത്തു. കാര്യം ലളിതമാണ്. ഒരു ആർക്കിടെക്റ്റിൻ്റെ പ്രവർത്തനത്തിൽ, ഒന്നോ അതിലധികമോ തെളിയിക്കപ്പെട്ട വഴികളിൽ സൗകര്യപ്രദമായി പരിഹരിക്കാൻ കഴിയുന്ന ജോലികൾ ഉണ്ട്.

സാമ്യമനുസരിച്ച്, സോഫ്‌റ്റ്‌വെയർ ഡിസൈനിന് അതിൻ്റേതായ വാസ്തുവിദ്യാ പ്രശ്‌നങ്ങളുണ്ട്, അതായത് ഒരു ആപ്ലിക്കേഷനെ ഘടകങ്ങൾ/മൊഡ്യൂളുകളായി വിഭജിക്കുക, അവയ്‌ക്കിടയിലുള്ള ഡിപൻഡൻസികൾ സംഘടിപ്പിക്കുക, പ്രവർത്തനപരമായ ഉത്തരവാദിത്തങ്ങൾ വിതരണം ചെയ്യുക തുടങ്ങിയവ. ഈ നാലംഗ സംഘത്തിൽ നിന്നുള്ള ("ഗാംഗ് ഓഫ് ഫോർ") പുസ്തകത്തിൻ്റെ രചയിതാക്കൾ സമർത്ഥമായി സൂചിപ്പിച്ചതുപോലെ, ഞങ്ങളുടെ വ്യവസായത്തിൽ ഒരു നിശ്ചിത എണ്ണം സ്റ്റാൻഡേർഡ് ടെംപ്ലേറ്റുകൾ തിരിച്ചറിയാനും കഴിയും, അങ്ങനെ പ്രായോഗികമായി പരീക്ഷിച്ചു. മറ്റുള്ളവർ ഇതിനകം മറികടന്നു.

ഒരു പ്രത്യേക ഡിസൈൻ പാറ്റേൺ ഉപയോഗിക്കുന്നതും ശരിയായി പ്രയോഗിക്കുന്നതും ഏത് സാഹചര്യങ്ങളിൽ ശരിയാണെന്ന് മനസിലാക്കുക എന്നതാണ് പാറ്റേണുകൾ മനസ്സിലാക്കുന്നതിൻ്റെ സാരാംശം. "എൻ്റെ ആപ്ലിക്കേഷനിൽ കൂടുതൽ പാറ്റേണുകൾ ഉൾപ്പെടുത്താൻ കഴിയുന്നത്, നല്ലത്" എന്ന സൂത്രവാക്യം തെറ്റാണെന്ന് മനസ്സിലാക്കേണ്ടത് പ്രധാനമാണ്. അവ വിവേകത്തോടെ ഉപയോഗിക്കുകയും അവ ശരിക്കും ആവശ്യമുള്ളിടത്ത് മാത്രം ഉപയോഗിക്കുകയും വേണം. കൂടാതെ, സാങ്കേതികവിദ്യ വികസിക്കുമ്പോൾ പാറ്റേണുകൾ കാലഹരണപ്പെടുകയും ആൻ്റി-പാറ്റേണുകളായി മാറുകയും ചെയ്യുന്നു (ഞങ്ങളുടെ ഫീൽഡിൽ ഇത് വേഗത്തിൽ ചെയ്യുന്നതിനേക്കാൾ കൂടുതൽ). കൂടാതെ, തീർച്ചയായും, പൊതുവായി അംഗീകരിച്ച ടെംപ്ലേറ്റുകൾ ഉണ്ട് കൂടാതെ ഇടുങ്ങിയ സർക്കിളുകളിൽ വിജയകരമായി ഉപയോഗിക്കുന്നവയും ഉണ്ട്.
ഇവിടെയും, ഇത് ഒരുതരം പിടിവാശിയല്ലെന്ന് നിങ്ങൾ മനസ്സിലാക്കേണ്ടതുണ്ട് - 10 വിശുദ്ധ ഡിസൈൻ പാറ്റേണുകൾ പോലെ :)

അവ എവിടെയാണെന്ന് മനസിലാക്കാൻ, നിങ്ങൾക്ക് അനുഭവം ആവശ്യമാണ്. അതായത് (എനിക്ക് വ്യക്തിപരമായി ബോധ്യമുണ്ട്) മറ്റുള്ളവരുടെ തെറ്റുകളിൽ നിന്ന് വളരെ പരിമിതമായ ആളുകൾക്ക് മാത്രമേ പഠിക്കാൻ കഴിയൂ. മറ്റെല്ലാവരും അത് സ്വയം കണ്ടെത്തണം :)

പാറ്റേണുകൾ പഠിക്കുന്നതിന് ഞാൻ ഇനിപ്പറയുന്ന നുറുങ്ങുകൾ നൽകും:

1) ഇത് ഏതുതരം മൃഗമാണെന്നും എന്തിനൊപ്പം കഴിക്കുന്നുവെന്നും മനസിലാക്കാൻ രണ്ട് പുസ്തകങ്ങൾ വായിക്കുക. നിങ്ങളുടെ ഡെവലപ്‌മെൻ്റ് സ്റ്റാക്കിനായി GoF ബുക്കിൻ്റെ വ്യതിയാനങ്ങളിൽ ഒന്ന് അല്ലെങ്കിൽ ചില ഡെറിവേറ്റീവുകൾ നിങ്ങൾക്ക് എടുക്കാം - പ്രധാന ജനപ്രിയ ടെംപ്ലേറ്റുകൾ പരിചയപ്പെടുക. ഇതിന് തൊട്ടുപിന്നാലെ, “ദി ബിറ്റർ ടേസ്റ്റ് ഓഫ് ജാവ” (ബ്രൂസ് ടേറ്റ്) എന്ന പുസ്തകം വായിക്കാൻ ഞാൻ ഉപദേശിക്കുന്നു - ഇത് ആൻ്റി പാറ്റേണുകളെക്കുറിച്ചാണ്. ഇത് മനസ്സിലാക്കാനുള്ളതാണ് മറു പുറംഅവരുടെ ഉപയോഗം. എനിക്ക് ഇത് ഇഷ്ടപ്പെട്ടു, ഇത് എന്നെ ഒരുപാട് പ്രശ്‌നങ്ങളിൽ നിന്ന് രക്ഷിച്ചുവെന്ന് ഞാൻ കരുതുന്നു. ജാവയുടെ ഉദാഹരണത്തിൽ ഉള്ളത് അപ്രധാനമാണ്. അത് ഏകദേശംടെംപ്ലേറ്റുകളെക്കുറിച്ച്, അതിനാൽ മറ്റ് സ്റ്റാക്കുകളുടെ പ്രതിനിധികൾക്ക് (ഞാനും ഉൾപ്പെടുന്ന) എന്തായാലും മനസ്സിലാക്കാൻ എളുപ്പമായിരിക്കും.

2) അതിനുമുമ്പ് നിങ്ങളുടെ ജോലിയിൽ എന്തെങ്കിലും നേരിട്ടിട്ടുണ്ടോ അതോ എളുപ്പത്തിൽ പാറ്റേണുകളിൽ ഒന്നായി മാറാൻ കഴിയുമോ എന്ന് മനസിലാക്കാൻ ശ്രമിക്കുക. ആശയം ശരിയായി പ്രയോഗിക്കാൻ കഴിയുന്നിടത്ത്, ഇതുമൂലം പ്രശ്നങ്ങൾ മാത്രമുണ്ടായത്.

3) പുതിയ പ്രോജക്റ്റുകളിൽ, ടെംപ്ലേറ്റുകളിൽ നിന്ന് ലഭിച്ച അറിവ് മനസ്സിൽ വയ്ക്കുക - അത് പെട്ടെന്ന് ഉപയോഗപ്രദമാകും.

ആത്യന്തികമായി, നിങ്ങൾക്ക് പാറ്റേണുകൾ അറിയാമെങ്കിലും ഇല്ലെങ്കിലും, ഏത് വാസ്തുവിദ്യയാണ് ശരിയെന്നും ഏതാണ് ശരിയല്ലെന്നും അനുഭവത്തിലൂടെ ഒരു ധാരണ വരുന്നു. ഇത് എങ്ങനെ സൗകര്യപ്രദമാക്കാം, എങ്ങനെ അല്ല. നിങ്ങൾ ഏത് പാറ്റേണുകൾ വിളിക്കുന്നു എന്നത് പ്രശ്നമല്ല.

മറുവശത്ത് നിന്ന് ഐടി വാസ്തുവിദ്യാ ജ്ഞാനത്തിൻ്റെ വികസനത്തെ സമീപിക്കാൻ പോലും ഞാൻ ഉപദേശിക്കുന്നു - പ്രവർത്തനരഹിതമായ ആവശ്യകതകളുടെ വശത്ത് നിന്ന് അല്ലെങ്കിൽ "-ഇലിറ്റികൾ" എന്ന് വിളിക്കപ്പെടുന്നവ - അവയിൽ പലതും ഉണ്ട്. ഇവിടെ 7 കഷണങ്ങൾ വിവരിച്ചിരിക്കുന്നു. പൊതുവേ, അവയിൽ ഡസൻ കണക്കിന് ഉണ്ട്.

മറ്റുള്ളവയിൽ - പരിപാലനക്ഷമത പോലെ ( ലളിതമായ പിന്തുണകോഡ്), സ്കേലബിളിറ്റി, എക്സ്റ്റൻസിബിലിറ്റി, ലഭ്യത മുതലായവ. നിങ്ങളുടെ ആപ്ലിക്കേഷൻ രൂപകൽപ്പന ചെയ്യുമ്പോൾ, നിങ്ങൾ ഈ "ഇലിറ്റി"കളെക്കുറിച്ച് ചിന്തിക്കുകയും പ്രോജക്റ്റിന് ആവശ്യമായ പരിധി വരെ അവ നൽകാൻ ശ്രമിക്കുകയും ചെയ്യുന്നുവെങ്കിൽ, ഒരു ചട്ടം പോലെ, നിങ്ങളുടെ ആപ്ലിക്കേഷന് മികച്ച വാസ്തുവിദ്യ ഉണ്ടായിരിക്കും. അതേസമയം, ഡിസൈൻ പാറ്റേണുകൾ അതിൽ സംക്ഷിപ്തമായി ദൃശ്യമാകും.

ടെംപ്ലേറ്റുകൾ ഉപയോഗിക്കുന്നതിനുള്ള ആശയം പരിചയസമ്പന്നരായ സോഫ്റ്റ്വെയർ എഞ്ചിനീയർമാരുടെ ഒരു ഡസൻ റെഡിമെയ്ഡ് പാചകക്കുറിപ്പുകൾ അനുഭവപരിചയമില്ലാത്തവർക്ക് നൽകാനുള്ള ശ്രമമായതിനാൽ, “രുചികരമായ കഞ്ഞി” എങ്ങനെ പാചകം ചെയ്യാമെന്ന് അവർ പഠിക്കുന്നതുവരെ, അവർ പൂർണ്ണമായും ഭക്ഷ്യയോഗ്യമല്ലാത്ത എന്തെങ്കിലും പാചകം ചെയ്യില്ല. :) "പാചകം" ചെയ്യാൻ പഠിക്കുക, -ഇലൈറ്റുകൾ മനസ്സിലാക്കുക :) എല്ലാം ശരിയാകും

വാസ്തുവിദ്യ

കമ്പ്യൂട്ടർ പ്രോഗ്രാം ഡിസൈൻ

കഥ

പ്രയോജനം

ഓരോന്നിൻ്റെയും പ്രധാന നേട്ടം പ്രത്യേക ടെംപ്ലേറ്റ്ഒരു കൂട്ടം അമൂർത്തമായ പ്രശ്‌നങ്ങൾക്കുള്ള പരിഹാരം ഇത് വിവരിക്കുന്നു എന്നതാണ്. കൂടാതെ, ഓരോ പാറ്റേണിനും അതിൻ്റേതായ പേരുണ്ട് എന്നത് ഡെവലപ്പർമാർക്കിടയിൽ അമൂർത്ത ഡാറ്റാ ഘടനകളെ (ADT) ചർച്ച ചെയ്യുന്നത് എളുപ്പമാക്കുന്നു, കാരണം അവയ്ക്ക് അറിയപ്പെടുന്ന പാറ്റേണുകളെ പരാമർശിക്കാൻ കഴിയും. അങ്ങനെ, ടെംപ്ലേറ്റുകൾ കാരണം, ടെർമിനോളജി, മൊഡ്യൂളുകളുടെ പേരുകൾ, പ്രോജക്റ്റ് ഘടകങ്ങൾ എന്നിവ ഏകീകരിക്കപ്പെടുന്നു.

ശരിയായി രൂപപ്പെടുത്തിയ ഡിസൈൻ പാറ്റേൺ, വിജയകരമായ ഒരു പരിഹാരം കണ്ടെത്തിയാൽ, വീണ്ടും വീണ്ടും ഉപയോഗിക്കാൻ അനുവദിക്കുന്നു.

ഭാഷാശൈലിയിൽ നിന്ന് വ്യത്യസ്തമായി, പാറ്റേണുകൾ ഉപയോഗിക്കുന്ന പ്രോഗ്രാമിംഗ് ഭാഷയിൽ നിന്ന് സ്വതന്ത്രമാണ്.

വിമർശനം

ചിലപ്പോൾ ടെംപ്ലേറ്റുകൾ ഒരു ഇടുങ്ങിയ ഗ്രൂപ്പ് വികസിപ്പിച്ച ആശയങ്ങളുടെ സങ്കീർണ്ണവും ഫലപ്രദമല്ലാത്തതുമായ സംവിധാനം സംരക്ഷിക്കുന്നു. പാറ്റേണുകളുടെ എണ്ണം നിർണ്ണായക സങ്കീർണ്ണതയ്‌ക്കപ്പുറം വർദ്ധിക്കുമ്പോൾ, പ്രകടനക്കാർ പാറ്റേണുകളും അവയുമായി ബന്ധപ്പെട്ട മുഴുവൻ സിസ്റ്റവും അവഗണിക്കാൻ തുടങ്ങുന്നു.

ഒരു സങ്കീർണ്ണ സോഫ്‌റ്റ്‌വെയർ പരിതസ്ഥിതിയിൽ ഡോക്യുമെൻ്റേഷൻ്റെ അഭാവമോ അപര്യാപ്തതയോ ടെംപ്ലേറ്റുകൾ പലപ്പോഴും മാറ്റിസ്ഥാപിക്കുന്നു.

ഓരോ വ്യക്തിഗത ടെംപ്ലേറ്റും തിരിച്ചറിയുന്നതിനുള്ള കാരണങ്ങളും മുൻവ്യവസ്ഥകളും മനസ്സിലാക്കാതെ റഫറൻസ് പുസ്തകത്തിൽ നിന്നുള്ള ടെംപ്ലേറ്റുകളുടെ അന്ധമായ പ്രയോഗം, ഒരു പ്രോഗ്രാമറുടെ പ്രൊഫഷണൽ വളർച്ചയെ മന്ദഗതിയിലാക്കുന്നു, കാരണം ഇത് ക്രിയേറ്റീവ് വർക്കിനെ ടെംപ്ലേറ്റുകളുടെ മെക്കാനിക്കൽ പകരം വയ്ക്കുന്നു. ഈ അഭിപ്രായത്തോട് ചേർന്നുനിൽക്കുന്ന ആളുകൾ വിശ്വസിക്കുന്നത്, നിങ്ങൾ പ്രൊഫഷണലായി "വളരുമ്പോൾ" ടെംപ്ലേറ്റുകളുടെ ലിസ്റ്റുകൾ നിങ്ങൾ പരിചയപ്പെടണമെന്ന് വിശ്വസിക്കുന്നു - മുമ്പല്ല. നല്ല മാനദണ്ഡംആവശ്യമായ പ്രൊഫഷണലിസം - ടെംപ്ലേറ്റുകൾ സ്വതന്ത്രമായി തിരിച്ചറിയൽ, അടിസ്ഥാനമാക്കി സ്വന്തം അനുഭവം. അതേ സമയം, തീർച്ചയായും, പാറ്റേണുകളുമായി ബന്ധപ്പെട്ട സിദ്ധാന്തവുമായുള്ള പരിചയം പ്രൊഫഷണലിസത്തിൻ്റെ ഏത് തലത്തിലും ഉപയോഗപ്രദമാണ്, കൂടാതെ ഒരു പ്രോഗ്രാമറുടെ വികസനം ശരിയായ ദിശയിലേക്ക് നയിക്കുകയും ചെയ്യുന്നു. "റഫറൻസ് പുസ്തകം അനുസരിച്ച്" ടെംപ്ലേറ്റുകളുടെ ഉപയോഗം മാത്രം സംശയാസ്പദമാണ്.

ടെംപ്ലേറ്റുകൾക്ക് മോശം ആപ്ലിക്കേഷൻ ഡെവലപ്മെൻ്റ് ശൈലികൾ പ്രോത്സാഹിപ്പിക്കാനാകും, അവ പലപ്പോഴും അന്ധമായി പ്രയോഗിക്കുന്നു.

ഈ പോരായ്മകൾ മറികടക്കാൻ, റീഫാക്ടറിംഗ് ഉപയോഗിക്കുന്നു.

ഡിസൈൻ പാറ്റേണുകളുടെ അടിസ്ഥാന തരങ്ങൾ

അടിസ്ഥാന ടെംപ്ലേറ്റുകൾ (അടിസ്ഥാനം)

  • മാർക്കർ ഇൻ്റർഫേസ്
  • പ്രോപ്പർട്ടി കണ്ടെയ്നർ

ജനറേറ്റീവ് ഡിസൈൻ പാറ്റേണുകൾ

  • ഫാക്ടറി രീതി, വെർച്വൽ കൺസ്ട്രക്റ്റർ
  • അജ്ഞാത സബ്റൂട്ടീൻ വസ്തുക്കൾ

ഘടനാപരമായ ടെംപ്ലേറ്റുകൾ

  • പ്രോക്സി/പകരം, പകരക്കാരൻ
  • കണ്ടെയ്നർ
  • വിപുലീകരണം
  • പൈപ്പുകളും ഫിൽട്ടറുകളും
  • സ്വകാര്യ ക്ലാസ് ഡാറ്റ

പെരുമാറ്റ രീതികൾ

സമാന്തര പ്രോഗ്രാമിംഗ് പാറ്റേണുകൾ (കൺകറൻസി)

  • സജീവ വസ്തു
  • ബാൽക്കിംഗ്
  • ഗാർഡഡ് സസ്പെൻഷൻ
  • പകുതി-സമന്വയം/പകുതി-അസമന്വിതം
  • നേതാക്കൾ/അനുയായികൾ
  • ഒബ്ജക്റ്റ് നിരീക്ഷിക്കുക
  • റിയാക്ടർ
  • റീഡ് റൈറ്റ് ലോക്ക്
  • ഷെഡ്യൂളർ
  • ത്രെഡ് പൂൾ
  • ത്രെഡ്-നിർദ്ദിഷ്ട സംഭരണം
  • സിംഗിൾ ത്രെഡ് എക്സിക്യൂഷൻ

എം.വി.സി

  • എന്റർപ്രൈസ്

    തരംതിരിച്ചിട്ടില്ല

    • പ്രോപ്പർട്ടി കണ്ടെയ്നർ
    • ഇവൻ്റ് ചാനൽ
    • ശേഖരം/സംഭരണം

    മറ്റ് തരത്തിലുള്ള ടെംപ്ലേറ്റുകൾ

    ഇന്ന് മറ്റ് നിരവധി ടെംപ്ലേറ്റുകളും ഉണ്ട്:

    • കാരിയർ റൈഡർ മാപ്പർ, സംഭരിച്ച വിവരങ്ങളിലേക്ക് ആക്സസ് നൽകുന്നു
    • സോഫ്‌റ്റ്‌വെയർ വികസന പ്രക്രിയ ആരംഭിക്കുന്നതിന് മുമ്പ് സോഫ്റ്റ്‌വെയർ ആവശ്യകതകൾ (ആവശ്യക വിശകലനം) വികസിപ്പിക്കുന്നതിനുള്ള അടിസ്ഥാന സമീപനത്തെ വിശകലന ടെംപ്ലേറ്റുകൾ വിവരിക്കുന്നു.
    • ആശയവിനിമയ ടെംപ്ലേറ്റുകൾ ഒരു സ്ഥാപനത്തിലെ വ്യക്തിഗത പങ്കാളികൾ/ജീവനക്കാർ തമ്മിലുള്ള ആശയവിനിമയ പ്രക്രിയയെ വിവരിക്കുന്നു
    • ഓർഗനൈസേഷണൽ ടെംപ്ലേറ്റുകൾ, ഒരു എൻ്റർപ്രൈസ്/സ്ഥാപനത്തിൻ്റെ ഓർഗനൈസേഷണൽ ശ്രേണിയെ വിവരിക്കുന്നു
    • പ്രോഗ്രാമുകൾ വികസിപ്പിക്കുമ്പോൾ എന്താണ് ചെയ്യാൻ പാടില്ലാത്തതെന്ന് ആൻ്റി-ഡിസൈൻ-പാറ്റേണുകൾ വിവരിക്കുന്നു, രൂപകൽപ്പനയിലും നടപ്പാക്കലിലും സ്വഭാവപരമായ പിശകുകൾ കാണിക്കുന്നു.

    ഇതും കാണുക

    • സാമാന്യവൽക്കരിച്ച പ്രോഗ്രാമിംഗ്
    • ലിങ്കുകൾ

      • ഓൾഗ ദുബിനഡിസൈൻ പാറ്റേണുകളുടെ അവലോകനം. - ഡിസൈൻ പാറ്റേണുകളിൽ ഏറ്റവും പ്രധാനപ്പെട്ട നിരവധി മോണോഗ്രാഫുകളുടെ അവലോകനം വിവര സംവിധാനം. സെപ്തംബർ 5, 2006-ന് ശേഖരിച്ചത്.
      • പോർട്ട്‌ലാൻഡ് പാറ്റേൺ റിപ്പോസിറ്ററി - വിക്കി എഞ്ചിനിലെ ഡിസൈൻ പാറ്റേണുകളുടെ പട്ടിക
      • mgrand's book - ഒരുപാട് ഡിസൈൻ പാറ്റേണുകളുടെ വിവരണമുള്ള ഒരു സൈറ്റ്
      • രാജി പാറ്റേണുകൾ - പ്രോജക്റ്റ്-ഡിസോറിയൻ്റഡ് ഡിസൈനിൻ്റെ ലംഘനങ്ങൾ (പാറ്റേണുകളുടെ ഒരു പാരഡി)
      • എക്ലിപ്‌സ് കൾച്ചർ ഓഫ് ഷിപ്പിംഗ് (ഇംഗ്ലീഷ്) എറിക് ഗാമ

      സാഹിത്യം

      • ഇ. ഗാമ, ആർ. ഹെൽം, ആർ. ജോൺസൺ, ജെ. വിലിസൈഡ്സ്ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് ഡിസൈൻ ടെക്നിക്കുകൾ. ഡിസൈൻ പാറ്റേണുകൾ = ഡിസൈൻ പാറ്റേണുകൾ: വീണ്ടും ഉപയോഗിക്കാവുന്ന ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് സോഫ്‌റ്റ്‌വെയറിൻ്റെ ഘടകങ്ങൾ. - സെൻ്റ് പീറ്റേഴ്സ്ബർഗ്: "പീറ്റർ", 2007. - പി. 366. - ISBN 978-5-469-01136-1 (കൂടാതെ ISBN 5-272-00355-1)
      • ക്രെയ്ഗ് ലാർമാൻ UML-ൻ്റെ അപേക്ഷ 2.0, ഡിസൈൻ പാറ്റേണുകൾ = UML, പാറ്റേണുകൾ എന്നിവ പ്രയോഗിക്കുന്നു: ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് അനാലിസിസും ഡിസൈനും ആവർത്തന വികസനവും ഒരു ആമുഖം. - എം.: "വില്യംസ്", 2006. - പി. 736. - ISBN 0-13-148906-2
      • മാർട്ടിൻ ഫൗളർഎൻ്റർപ്രൈസ് ആർക്കിടെക്ചർ സോഫ്റ്റ്വെയർ ആപ്ലിക്കേഷനുകൾ= എൻ്റർപ്രൈസ് ആപ്ലിക്കേഷൻ ആർക്കിടെക്ചറിൻ്റെ പാറ്റേണുകൾ (അഡിസൺ-വെസ്ലി സിഗ്നേച്ചർ സീരീസ്). - എം.: "വില്യംസ്", 2007. - പി. 544. - ISBN 0-321-12742-0
      • ജോഷ്വ കെറിവ്സ്കിപാറ്റേണുകളിലേക്ക് റീഫാക്റ്ററിംഗ് (അഡിസൺ-വെസ്ലി സിഗ്നേച്ചർ സീരീസ്). - എം.: "വില്യംസ്", 2006. - പി. 400. - ISBN 0-321-21335-1
      • സ്കോട്ട് ഡബ്ല്യു ആംബ്ലർ, പ്രമോദ്കുമാർ ജെ സദലജ്റീഫാക്റ്ററിംഗ് ഡാറ്റാബേസുകൾ: പരിണാമ ഡാറ്റാബേസ് ഡിസൈൻ (അഡിസൺ-വെസ്ലി സിഗ്നേച്ചർ സീരീസ്). - എം.: "വില്യംസ്", 2007. - പി. 368. - ISBN 0-321-29353-3

      വിക്കിമീഡിയ ഫൗണ്ടേഷൻ. 2010.

  • പാറ്റേഴ്സൺ, ജെയിംസ്
  • പാറ്റേഴ്സൺ, പെർസിവൽ

മറ്റ് നിഘണ്ടുവുകളിൽ "ഡിസൈൻ പാറ്റേണുകൾ" എന്താണെന്ന് കാണുക:

    ഡിസൈൻ പാറ്റേൺ- ഈ പദത്തിന് മറ്റ് അർത്ഥങ്ങളുണ്ട്, പാറ്റേൺ കാണുക. സോഫ്‌റ്റ്‌വെയർ വികസനത്തിൽ, ഒരു ഡിസൈൻ പാറ്റേൺ എന്നത് ഒരു പ്രശ്‌നത്തിനുള്ള പരിഹാരത്തെ പ്രതിനിധീകരിക്കുന്ന ആവർത്തിക്കാവുന്ന വാസ്തുവിദ്യാ രൂപകൽപ്പനയാണ്... ... വിക്കിപീഡിയ

    ഡിസൈൻ പാറ്റേണുകൾ- (പാറ്റേൺ, ഇംഗ്ലീഷ് ഡിസൈൻ പാറ്റേൺ) ഒരു പരിഹാരം നൽകുന്ന പുനരുപയോഗിക്കാവുന്ന ഒരു വാസ്തുവിദ്യാ ഘടനയാണ് സാധാരണ പ്രശ്നംഒരു പ്രത്യേക സന്ദർഭത്തിനുള്ളിൽ രൂപകൽപ്പന ചെയ്യുകയും ഈ തീരുമാനത്തിൻ്റെ പ്രാധാന്യം വിവരിക്കുകയും ചെയ്യുന്നു. പാറ്റേൺ പൂർത്തിയായിട്ടില്ല... ...വിക്കിപീഡിയ

    GRASP ഡിസൈൻ പാറ്റേണുകൾ- GRASP (ജനറൽ റെസ്‌പോൺസിബിലിറ്റി അസൈൻമെൻ്റ് സോഫ്‌റ്റ്‌വെയർ പാറ്റേണുകൾ) - പരിഹരിക്കാൻ ഒബ്‌ജക്‌റ്റ് ഓറിയൻ്റഡ് ഡിസൈനിൽ ഉപയോഗിക്കുന്ന പാറ്റേണുകൾ പൊതുവായ ജോലികൾക്ലാസുകളിലേക്കും ഒബ്‌ജക്റ്റുകളിലേക്കും ഉത്തരവാദിത്തങ്ങൾ ഏൽപ്പിക്കുന്നതിലൂടെ. ഇൻ... വിക്കിപീഡിയ