ස්ථිතික පන්තිය සහ සිංගල්ටන් රටාව අතර වෙනස?


1778

ස්ථිතික පංතියක් සහ සිංගල්ටන් රටාවක් අතර පවතින සැබෑ (එනම් ප්‍රායෝගික) වෙනස කුමක්ද?

ක්ෂණිකව තොරව දෙකම ආයාචනා කළ හැකිය, දෙකම සපයන්නේ එක් "අවස්ථාවක්" පමණක් වන අතර ඒ දෙකම නූල් ආරක්ෂිත නොවේ. වෙනත් වෙනසක් තිබේද?


4
භාෂාව ක්‍රියාත්මක කිරීම සහ ඔබේ භාවිත රටාවන් මත පදනම්ව, ඔබට එය භාවිතා කිරීමට අවශ්‍ය සෑම අවස්ථාවකම ක්‍රමවේදය ඇමතීමේ පොදු කාර්යය නිසා සිංගල්ටන් අඩු කාර්යක්ෂමතාවයක් ඇති විය හැකියgetInstance() (බොහෝ විට එය වැදගත් නොවේ ).
ඕනෑවට වඩා php

5
දැනටමත් පිළිතුරු ගොඩක් තිබේ. එය ඇත්ත වශයෙන්ම ක්‍රම යනු හුදෙක් කාර්යයන් වන OO නොවන singletonවස්තුවකි static.
fastcodejava

4
ක්‍රියාත්මක කිරීම මත රඳා පවතී .. csharpindepth.com/Articles/General/Singleton.aspx
VJAI

4
පංතිය ක්‍රියාත්මක කිරීම සඳහා තෙවන පාර්ශවයන්ට ඉඩ දීමට ඔබට අවශ්‍ය විට වෙනසක් ඇත. මෙම අවස්ථාවේ දී ඔබට සාමාන්‍යයෙන් කර්මාන්තශාලා රටා ද අවශ්‍ය වේ. Agiletribe.wordpress.com/2013/10/08/…
AgilePro

IMO මෙම පිළිතුර ඉතා හොඳින් සාරාංශ කරයි stackoverflow.com/questions/14097656/…
ඩේව්

Answers:


1257

සිංගල්ටන් හෝ ස්ථිතික ක්‍රමයක් නූල් ආරක්ෂිත නොවන බව ඔබට පැවසීමට හේතුව කුමක්ද? සාමාන්යයෙන් දෙකම යුතු නූල්-ආරක්ෂිත ක්රියාත්මක කළ යුතුය.

සිංගල්ටන් සහ ස්ථිතික ක්‍රම සමූහයක් අතර ඇති විශාල වෙනස නම්, සිංගල්ටෝනවලට අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි වීමයි (හෝ ප්‍රයෝජනවත් පාදක පන්ති වලින් ව්‍යුත්පන්න වී ඇත, එය එතරම් සුලභ නොවූවත්, මගේ අත්දැකීම් අනුව), එබැවින් ඔබට සිංගල්ටන් වටා ගමන් කළ හැකිය “එය තවත් එකක් ක්‍රියාත්මක කිරීම.


29
හොඳයි, ඔබ එයට කැමති නම්, සහජයෙන්ම නූල් ආරක්ෂිත නොවේ, ඔබ ඒවා දෙකම නූල් ආරක්ෂිත විය යුතුය, ඒ දෙකම, එබැවින් එහි වෙනසක් නැත.
ජෝර්ජ් කෝර්ඩෝබා

119
ඔබ දෙයක් උදාහරණයක් දෙන්න පුළුවන් වන්නේ පරමාණු හා අණුවල පැවැත්ම වර්ග හැර වෙනත් උපතින් ම threadsafe?
ජෝන් ස්කීට්

26
ස්කීට් කිරීමට: සිංගල්ටන් නූල් ආරක්ෂිත නොවන බව පවසන මිනිසුන් අදහස් කරන්නේ තනි තනිවම නූල් අතර අනවශ්‍ය ලෙස බෙදාගෙන ඇති අතර , ඔබට අවශ්‍ය විටදී තොග වස්තු බෙදා ගන්නා බවයි, එයින් අදහස් කරන්නේ ඔබ අනවශ්‍ය සමමුහුර්ත කිරීමක් කළ යුතු නැති බවයි.

45
Ee ගීක්: සිංගල්ටන් අතුරු මුහුණතක් ක්‍රියාත්මක කරයි යැයි සිතන්න Foo, ඔබට Fooපරාමිතියක් ලෙස ක්‍රමයක් ගත හැකිය . එම සැකසුම සමඟ, ඇමතුම්කරුවන්ට ක්‍රියාත්මක කිරීම ලෙස සිංගල්ටන් භාවිතා කිරීමට තෝරා ගත හැකිය - නැතහොත් ඔවුන්ට වෙනත් ක්‍රියාත්මක කිරීමක් භාවිතා කළ හැකිය. මෙම ක්‍රමය සිංගල්ටන් වලින් විසන්ධි වේ. පංතියට ස්ථිතික ක්‍රම ඇති තත්වය සමඟ සසඳන්න - එම ක්‍රම ඇමතීමට අවශ්‍ය සෑම කේත කැබැල්ලක්ම පන්තියට තදින් සම්බන්ධ කර ඇත, මන්ද ස්ථිතික ක්‍රම අඩංගු වන්නේ කුමන පන්තියටද යන්න නියම කළ යුතුය.
ජෝන් ස්කීට්

10
M අමීර්බාරකෙට්: එය සිංගල්ටන් මෝස්තර රටාව අනුව තනි පුද්ගලයෙක් නොවේ - පංතිය විසින්ම අවස්ථා කිහිපයක් නිර්මාණය කිරීමට ඉඩ දෙන්නේ නම්, කර්මාන්ත ශාලාව කුමක් කළත් එය තනි අයිඑම්ඕ නොවේ.
ජෝන් ස්කීට්

477

සත්‍ය පිළිතුර මෙහි තවත් සංසදයක ජෝන් ස්කීට් විසිනි.

තනි තනි තනි අවස්ථාවකට ප්‍රවේශ වීමට සිංගල්ටන් ඉඩ දෙයි - එම අවස්ථාව (හෝ ඒ සඳහා යොමු කිරීමක්) වෙනත් ක්‍රමවලට පරාමිතියක් ලෙස සම්මත කළ හැකි අතර සාමාන්‍ය වස්තුවක් ලෙස සලකනු ලැබේ.

ස්ථිතික පන්තියකට ඉඩ දෙන්නේ ස්ථිතික ක්‍රම පමණි.


66
ස්ථිතික getInstance () ක්‍රමය අමතා ඔබට ඕනෑම තැනක සිට එකම අවස්ථාවකට පිවිසිය හැකි නම්, ඔබ පරාමිතියක් ලෙස සිංගල්ටන් එකක් සම්මත කරන්නේ ඇයි?
හෙන්රික් ඕර්ඩින්

23
En හෙන්රික් ඕර්ඩින් ඉතින් එය පවතින කේතයට ගැලපෙන අතර අතුරු මුහුණතක් ලබා දිය හැකිද?

6
En හෙන්රික් ඕර්ඩින් ඔවුන් කතා කරන්නේ ස්ථිතික පන්තිය ගැන මිස ස්ථිතික ක්‍රම සහිත පන්තියක් ගැන නොවේ. ස්ථිතික පන්තිය ක්ෂණිකව කළ නොහැක. එසේ වුවද, ඔබ ස්ථිතික ක්‍රම අඩංගු (ස්ථිතික නොවන) පන්තියක උදාහරණයක් සමත් වුවහොත්, ඔබට උදාහරණයක් ලෙස ස්ථිතික ක්‍රම ඇමතිය නොහැක.
ගෝරන්

3
ස්ථිතික පන්තියක් යනු කුමක්ද? අවම වශයෙන් ජාවාහි එවැනි දෙයක් නොමැත.
හෙන්රික් ඕර්ඩින්

16
Ora ගෝරන් ඔබේ වචන වලින් මම මුලින් ව්‍යාකූල විය. ඔබ පැවසුවේ "ඔබට ස්ථිතික ක්‍රම ඇමතිය නොහැක". මම කියවූයේ "ඔබට ක්ෂණික වස්තුවක් ගැන සඳහනක් තිබේ නම්, ඔබට එහි ඇති ස්ථිතික ක්‍රම කිසිවක් හැඳින්විය නොහැක." එය ඇත්ත වශයෙන්ම වැරදිය. එය කිහිප වතාවක් නැවත කියවීමෙන් පසු ඔබ අදහස් කළේ "ස්ථිතික ක්‍රම ඇතුළත සිට ඔබට පන්තියේ ස්ථිතික නොවන වස්තූන් වෙත ප්‍රවේශ විය නොහැක" යන්නයි. මෙම සංකල්පවලට අලුතින් පැමිණෙන ඕනෑම කෙනෙකුට මෙම පිළිතුර හමු වී ඔබේ අදහස් කියවන බව පැහැදිලි කිරීමට අවශ්‍යය.
ඇන්ඩ rew ස්ටීට්ස්

358
  1. සිංගල්ටන් වස්තූන් හීප් හි ගබඩා කර ඇති නමුත් ස්ථිතික වස්තු තොගයේ ගබඩා කර ඇත .
  2. අපට සිංගල්ටන් වස්තුව ක්ලෝන කළ හැකිය (නිර්මාණකරු එය අනුමත නොකළේ නම්), නමුත් අපට ස්ථිතික පන්ති වස්තුව ක්ලෝන කළ නොහැක.
  3. සිංගල්ටන් පංති OOP (වස්තු නැඹුරු මූලධර්ම) අනුගමනය කරයි , ස්ථිතික පන්ති එසේ නොවේ.
  4. අපට interfaceසිංගල්ටන් පංතියක් සමඟ ක්‍රියාත්මක කළ හැකිය , නමුත් පන්තියේ ස්ථිතික ක්‍රම (හෝ උදා: සී # static class) කළ නොහැක.

101
දෙවන ප්රකාශය වැරදිය. අපට සිංගල්ටන් වස්තුව ක්ලෝන කළ නොහැක. සිංගල්ටන් ක්‍රියාත්මක කිරීම මෙය ප්‍රතික්ෂේප කළ යුතුය. ඔබට සැබවින්ම සිංගල්ටන් ක්ලෝන කළ හැකි නම්, එය සිංගල්ටන් නොවේ.
ඇලෙක්සැන්ඩර් යන්චාරුක්

20
මෙය ජාවා සඳහා පිළිතුර නිවැරදි නොවේ: සිංගල්ටන් හෝ ස්ථිතික හෝ තොගය භාවිතා නොකරයි.
AgilePro

73
# 1 වැදගත් නොවේ. # 2 දෝෂ සහිත ක්‍රියාත්මක කිරීමක් විස්තර කරයි. # 3 සම්පූර්ණයෙන්ම අසාධාරණ ය.
කේසි

31
ස්ථිතික වස්තුව තොගයේ ගබඩා කරන්නේ කෙසේද? ඔබ ක්‍රමයක් ඉල්ලා සිටින විට නව සිරස් රාමුවක් සාදනු ලැබේ, එය ක්‍රමයේ දේශීය විචල්‍යයන් ගබඩා කරයි, ක්‍රමය නැවත පැමිණෙන විට මෙම සිරස් රාමුව ඉවත් කරනු ලැබේ, සහ එම දේශීය විචල්‍යයන් නැති වී යයි. ස්ථිර තොග වේගවත් නමුත් ස්ථිතික වස්තු ගබඩා කිරීම සුදුසු නොවේ.
mike_m

23
මට මේ උඩුකුරු ගණන තේරුම් ගත නොහැක. 1) සිංගල්ටන් තොගයේ ගබඩා කළ යුත්තේ ඇයි? දේශීය ක්‍රම විචල්‍යයන් / පරාමිතීන් හැරුණු විට සී # හෝ ජාවා දත්ත වැනි කළමනාකරණ භාෂාවල කළමනාකරණ ගොඩක ගබඩා කර ඇත. 2) ඔබට එය ක්ලෝන කළ හැකි නම්, එය නිසි ලෙස ක්‍රියාත්මක කරන ලද තනි පුද්ගලයෙක් නොවේ. 3) සිංගල්ටන් OOP ප්‍රති-රටාවක් ලෙස හැඳින්වේ; එනම් හැකි නම් ඔබ මග හැරිය යුතු දෙයක්. 4) නිවැරදි එකම දෙය මෙයයි.
Groo

152

ස්ථිතික පංතිවලට වඩා සිංගල්ටන් රටාවට වාසි කිහිපයක් තිබේ. පළමුවෙන්ම, තනි පුද්ගලයෙකුට පන්ති දීර් extend කර අතුරු මුහුණත් ක්‍රියාත්මක කළ හැකි අතර ස්ථිතික පන්තියකට එය කළ නොහැක (එයට පන්ති දීර් extend කළ හැකි නමුත් එය ඔවුන්ගේ උදාහරණ සාමාජිකයින්ට උරුම නොවේ). සිංගල්ටන් එකක් කම්මැලි හෝ අසමමුහුර්තව ආරම්භ කළ හැකි අතර ස්ථිතික පංතියක් සාමාන්‍යයෙන් පළමු වරට පටවන විට එය ආරම්භ කළ හැකි අතර එය පන්ති පැටවුම් ගැටළු වලට තුඩු දෙයි. කෙසේ වෙතත් වඩාත්ම වැදගත් වාසිය නම්, එක් අවස්ථාවක් පමණක් ඇතැයි උපකල්පනය කිරීමට ඔවුන්ගේ පරිශීලකයින්ට බල නොකර තනි තනිව බහුඅවයවික ලෙස හැසිරවිය හැකි වීමයි.


10
හොඳ, ප්‍රායෝගික කරුණු සඳහා +1. සිංගල්ටන් රටාව පොදුවේ ඕනෑවට වඩා භාවිතා වන නමුත් එය සුදුසු අවස්ථා කිහිපයක් තිබේ. මෙයද බලන්න: agiletribe.wordpress.com/2013/10/08/…
AgilePro

3
බහු අවයවික වීමේ වාසිය ගැන ඔබ නිවැරදිය. මෙය වැදගත්ම කරුණයි
අහමඩ්

කැදැලි ස්ථිතික පන්තියට අතුරු මුහුණත ක්‍රියාත්මක කළ හැකිය. එය කේතනය කිරීමට උත්සාහ කරන්න, වැඩ කරනු ඇත. මට කිසිදු දෝෂයක් නොමැතිව කේතය සම්පාදනය කළ හැකිය.
නැනෝසොෆ්ට්

76

staticපංති යනු රාජ්‍යයට අවශ්‍ය කිසිවක් සඳහා නොවේ. කාර්යයන් සමූහයක් එකට තැබීම සඳහා එය ප්‍රයෝජනවත් වේ Math( එනම් Utilsව්‍යාපෘති වල). එබැවින් පංතියේ නම අපට කාර්යයන් සොයා ගත හැකි හෝඩුවාවක් ලබා දෙයි.

Singletonමගේ ප්‍රියතම රටාව වන අතර මම එය එක් අවස්ථාවකදී යමක් කළමනාකරණය කිරීමට භාවිතා කරමි. එය staticපන්තිවලට වඩා නම්‍යශීලී වන අතර එහි තත්වය පවත්වා ගත හැකිය. එයට අතුරු මුහුණත් ක්‍රියාත්මක කිරීමට, වෙනත් පංතිවලින් උරුම වීමට සහ උරුමයට ඉඩ දිය හැකිය.

අතර තෝරා මගේ පාලනය staticහා singleton:

එකට තබා ගත යුතු කාර්යයන් සමූහයක් තිබේ staticනම්, තේරීම වේ. සමහර සම්පත් සඳහා තනි ප්‍රවේශයක් අවශ්‍ය වෙනත් දෙයක් a ලෙස ක්‍රියාත්මක කළ හැකිය singleton.


16
ස්ථිතික පංති රාජ්‍ය සුරැකීමට අවශ්‍ය කිසිවක් නොකළ යුත්තේ ඇයි?
Trisped

12
RisPrisped: ආරම්භ කිරීම හෝ අවසන් කිරීම පිළිබඳව ඔබට නිවැරදි පාලනයක් නොමැත.
Xaqron

7
"සිංගල්ටන් මගේ ප්‍රියතම රටාව" දී ඔබට මාව අහිමි විය. සිංගල්ටන් යනු තියුණු කොනක් වන අතර එය රටා විරෝධී රටාවක් මෙන්ම රටාවක් ලෙස සැලකිය යුතුය. පංතිවලට ස්ථිතික තත්වයන් තිබිය හැකිය, එයද තනි ප්‍රවේශයකි, ඕනෑම ස්ථිතික තත්වයක් තනි බොත්තම් වලට වඩා “තනි ප්‍රවේශය” නම් බොහෝ සිංගල්ටන් ක්‍රියාත්මක කිරීම් කැඩී ඇත. ඔබට සිංගල්ටන් ක්ලෝන කළ හැකි අතර, අද්විතීය යැයි අර්ථ දැක්වීමෙන් ස්ථිතික ආශීර්වාද ලැබේ.
PoweredByRice

1
රාජ්‍යය පවත්වා ගැනීම යන්නෙන් අදහස් කරන්නේ කුමක්ද? රාජ්‍යය යනු කුමක්ද?
කයිල් ඩෙලනි

2
Yle කයිල් ඩෙලනි: සරලවම කාලයත් Stateසමඟ වෙනස් වන වස්තුවක විවිධ ගුණාංගවල එකතුවකි. විධිමත් අර්ථ දැක්වීම සඳහා ඔබට ගූගල් කළ හැකිය.
ෂක්‍රොන්

65

ස්ථිතික පන්තිය: -

  1. ඔබට ස්ථිතික පන්තියේ උදාහරණය නිර්මාණය කළ නොහැක.

  2. පංතිය අඩංගු වැඩසටහන හෝ නාම අවකාශය පටවන විට .NET Framework පොදු භාෂා ධාවන කාලය (CLR) මඟින් ස්වයංක්‍රීයව පූරණය වේ.

  3. ස්ථිතික පන්තියට ඉදිකිරීම්කරුවෙකු සිටිය නොහැක.

  4. අපට ස්ථිතික පන්තිය ක්‍රමයට සමත් කළ නොහැක.

  5. අපට C # හි වෙනත් ස්ථිතික පන්තියකට ස්ථිතික පන්තිය උරුම කර ගත නොහැක.

  6. සියලු ස්ථිතික ක්‍රම ඇති පන්තියක්.

  7. වඩා හොඳ කාර්ය සාධනය (ස්ථිතික ක්‍රම සම්පාදනය කරන වේලාව මත බන්ධනය වේ)

සිංගල්ටන්: -

  1. ඔබට වස්තුවේ එක් අවස්ථාවක් නිර්මාණය කර එය නැවත භාවිතා කළ හැකිය.

  2. පරිශීලකයා ඉල්ලූ විට පළමු වරට සිංගල්ටන් උදාහරණය නිර්මාණය වේ.

  3. සිංගල්ටන් පන්තියට ඉදිකිරීම්කරුවෙකු සිටිය හැකිය.

  4. ඔබට සිංගල්ටන් පංතියේ වස්තුව නිර්මාණය කර එය ක්‍රමයට යොමු කළ හැකිය.

  5. සිංගල්ටන් පංතිය උරුමය පිළිබඳ කිසිදු සීමාවක් නොකියයි.

  6. අපට තනි පන්තියක වස්තු බැහැර කළ හැකි නමුත් ස්ථිතික පන්තියට අයත් නොවේ.

  7. ක්රම ඉක්මවා යා හැකිය.

  8. අවශ්‍ය විට කම්මැලි පැටවිය හැකිය (ස්ථිතික පන්ති සෑම විටම පටවනු ලැබේ).

  9. අපට අතුරු මුහුණත ක්‍රියාත්මක කළ හැකිය (ස්ථිතික පන්තියට අතුරු මුහුණත ක්‍රියාත්මක කළ නොහැක).


13
ස්ථිතික පංති සඳහා ඉදිකිරීම්කරුවන් ඇත: msdn.microsoft.com/en-us/library/k9x6w0hc.aspx
ටොමර් අරාසි

2
ඔව්, ස්ථිතිකයට එම පන්තියට අභ්‍යන්තරව ඉදිකිරීම්කරුවෙකු සිටිය හැකිය. පංතියේ ඕනෑම ස්ථිතික ක්‍රමයක් හැඳින්වූ විට මෙය ක්‍රියාත්මක වේ.
රාහුල්මර්

සම්පාදිත වේලාවේ සිංගල්ටන් සඳහා, එය HEAP මතකයේ ගබඩා කර ඇති නමුත් එය ක්ෂණිකව ලැබුනහොත් එය STACK හි ගබඩා වේද?
දීප්තිමත්_දෙව්

@ ලුමිනස්_දෙව් අංක. ඕනෑම සිංගල්ටන් නිදසුනක් යනු දවස අවසානයේ ඇති වස්තු අවස්ථාවකි. එය සැකයකින් තොරව ගොඩවල් මත ගබඩා වේ.
ආර්බීටී

1
@rahulmr වැදගත් වෙනස: පළමු (AKA පමණි) අවස්ථාව නිර්මාණය කිරීමට පෙර ඉදිකිරීම්කරු ද ආයාචනා කරනු ලැබේ.
CoolOppo

53

ස්ථිතික පංතිය යනු ස්ථිතික ක්‍රම පමණක් ඇති අතර ඒ සඳහා වඩා හොඳ වචනයක් “ශ්‍රිත” වේ. ස්ථිතික පංතියක අන්තර්ගත මෝස්තර විලාසය තනිකරම ක්‍රියා පටිපාටියකි.

සිංගල්ටන් යනු OO නිර්මාණයට විශේෂිත රටාවකි. එය වස්තුවක නිදසුනකි (බහුමාපකය වැනි එයට ඇති සියලු හැකියාවන් සහිත), නිර්මාණ ක්‍රියාවලියක් සමඟින්, එම සුවිශේෂී භූමිකාවේ මුළු ජීවිත කාලය පුරාම එකම අවස්ථාවක් පමණක් ඇති බව සහතික කරයි.


1

32
ඉතින් ඔබ සිතනවා. මම වෙනස් ලෙස සිතමි. ;) උදාහරණයක් ලෙස, අතුරු මුහුණතක් ලබා දෙන සිංගල්ටන් කර්මාන්ත ශාලාවක් ගැන සිතන්න. ඔබ ISingleton එකක් ලබා ගන්නා බව ඔබ දන්නවා (එය සදහටම එක හා සමානයි) නමුත් අවශ්‍යයෙන්ම එය ක්‍රියාත්මක කිරීම නොවේ.
මොරෙන්ඩිල්

කැදැලි ස්ථිතික පන්තියට නිදර්ශන ක්‍රම ද තිබිය හැකිය, එය ස්ථිතික ක්‍රම පමණක් සීමා නොකෙරේ .. එය කේත කර ඔබට දැක ගත හැකිය.
නැනෝසොෆ්ට්

වඩා හොඳ වස්තු ආකෘතියක් සහිත භාෂාවල (උදා: රූබි), පන්ති ද වස්තු වේ. ස්ථිතික පංතියක “තනිකරම කාර්ය පටිපාටික” අංගය භාෂාව විසින් පනවනු ලබන අත්තනෝමතික සීමාවකි.
මැක්ස්

36

සිංගල්ටන් රටාවෙන් ඔබට ව්‍යුත්පන්න වර්ගයක නිදසුනක් ලෙස සිංගල්ටන් නිර්මාණය කළ හැකිය, ස්ථිතික පන්තියකින් ඔබට එය කළ නොහැක.

ඉක්මන් උදාහරණය:

if( useD3D )
    IRenderer::instance = new D3DRenderer
else
    IRenderer::instance = new OpenGLRenderer

39
එය සැබවින්ම සිංගල්ටන් රටාවක් නොවේ, මට කර්මාන්ත ශාලාවක් මෙන් පෙනේ.
vava

10
ඇත්ත වශයෙන්ම, මේ දෙක අතර ඇති මූලික වෙනස නම්, සිංගල්ටන් සිය තනි වස්තුව "හැඹිලි" කර නැවත එකම (නැවත යොමු කිරීමක්) කරයි. කර්මාන්තශාලා රටාව නව අවස්ථා නිර්මාණය කරයි.
ගුප්ත

12
එවිට එය ප්‍රොක්සි-
සිංගල්ටන්

3
හ්ම්, මම දන්නවා මොනෝස්ටේට් ලෙස සිංගල්ටන්හි මෙම විවිධත්වය.
හපී

උදාහරණයක් ලෙස කර්මාන්තශාලා රටාව
රාජවෙල් ඩී

26

ජෝන් ස්කීට්ගේ පිළිතුර පුළුල් කිරීමට

සිංගල්ටන් සහ ස්ථිතික ක්‍රම සමූහයක් අතර ඇති විශාල වෙනස නම්, සිංගල්ටෝනවලට අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි වීමයි (හෝ ප්‍රයෝජනවත් මූලික පංති වලින් ව්‍යුත්පන්න වූවත්, එය අඩු පොදු IME වුවද), එබැවින් ඔබට සිංගල්ටන් වටා ගමන් කළ හැක්කේ එය “තවත්” ක්‍රියාත්මක කිරීමක් ලෙස ය.

ඒකකයක් පන්තියක් පරීක්ෂා කිරීමේදී වැඩ කිරීමට පහසුය. ඔබ සිංගල්ටන් පරාමිතියක් ලෙස කොතැනට ගියත් (ඉදිකිරීම්කරුවන්, සැකසුම් කරන්නන් හෝ ක්‍රම) ඔබට ඒ වෙනුවට සිංගල්ටන්හි සමච්චල් කරන ලද හෝ මුරණ්ඩු අනුවාදයක් ආදේශ කළ හැකිය.


මම හිතන්නේ නැහැ ඔබට කෙලින්ම සමච්චලයට සරදම් කළ හැකිය. සිංගල්ටන් සහ විහිළු පන්තිය යන දෙකම ක්‍රියාත්මක කරන අතුරු මුහුණතක් ප්‍රකාශ කිරීමට ඔබට අවශ්‍ය නොවේද?
එලන් ස්පර්ටස්

@espertus ඇයි ඔයාගේ තනිකඩයාට සමච්චල් කරන්න බැරි? මොකිටෝ භාවිතා කරන උදාහරණය MySingleton mockOfMySingleton = mock(MySingleton.class).
මයික් රයිලන්ඩර්

ඔබ හරි, පරාවර්තනය භාවිතා කරන මොකිටෝ වැනි මෙවලම් සමඟ ඔබට එය සමච්චල් කළ හැකිය. මම අදහස් කළේ ඔබට එය උප වර්ගීකරණය කිරීමෙන් සහ එහි ක්‍රම ඉක්මවා යාමෙන් කෙලින්ම සමච්චල් කළ නොහැකි බවයි.
එලන් ස්පර්ටස්

@espertus ඇයි නැත්තේ? ඔබ පරීක්‍ෂා කරන වස්තුව ක්ෂණිකව ක්‍රියාත්මක කරන විට, ඔබ මුල් පිටපත භාවිතා කළ ඕනෑම තැනක ඔබේ සිංගල්ටන් උප පංතිය ක්‍රියාත්මක කිරීම ආදේශ කළ හැකිය. උදා:new ClazzToTest(mockSingleton);
මයික් රයිලන්ඩර්

මම මොකිටෝ භාවිතා කර නැත, නමුත් පරාවර්තනය භාවිතා කිරීමෙන් හැර, තනි ඉදිකිරීම් සඳහා වන පුද්ගලික ඉදිකිරීම්කරුවෙකු සිටින පන්තියක් ඔබට උපවර්ගයක් කරන්නේ කෙසේද? ආශ්‍රිත සාකච්ඡා: stackoverflow.com/questions/2302179/mocking-a-singleton-class stackoverflow.com/questions/15939023/…
එලන් ස්පර්ටස්

23

මෙන්න හොඳ ලිපියක්: http://javarevisited.blogspot.com.au/2013/03/difference-between-singleton-pattern-vs-static-class-java.html

ස්ථිතික පන්ති

සිංගල්ටන්

සාරාංශයක් ලෙස, මම භාවිතා කරන්නේ ක්‍රම භාවිතා කිරීම සඳහා ස්ථිතික පන්ති පමණක් වන අතර අනෙක් සියල්ල සඳහා සිංගල්ටන් භාවිතා කරමි.


සංස්කරණය කරයි


4
මම ජාවා ගැන නොදනිමි, නමුත් .නෙට් හි, ඔබේ අවසාන කරුණු දෙක වැරදිය. ස්ථිතික පංතිවලට ස්ථිතික විධිවිධාන සහ ක්ෂේත්‍ර සඳහන් කළ හැකිය, එබැවින් ඒවා සමාන වේ. ඔවුන් කම්මැලි පටවා ඇත - ස්ථිතික ඉදිකිරීම්කරු ක්‍රියාත්මක වන්නේ: 1) පන්තියේ උදාහරණයක් නිර්මාණය වේ. 2) පංතියේ ඕනෑම ස්ථිතික සාමාජිකයෙකු යොමු කරනු ලැබේ. 1 අදාළ නොවේ, එය 2 හැර යයි. එබැවින්, ස්ථිතික පංතියක් පළමු වරට භාවිතා කරන තුරු පටවනු නොලැබේ.
jmoreno

1
ස්ථිතික පංතිය සඳහා, ඔබට ස්ථිතික ක්‍රමය ඉක්මවා යා නොහැකි වුවද, ඔබට ස්ථිතික ක්‍රමය එහි මවුපියන්ගෙන් සැඟවිය හැක.
මැක්ස් පෙන්

එසේ Animal animal = new Cat();නම් animal.foo();කුමක් සිදුවේද?
දීප්තිමත්_දෙව්

පළමු වරට භාවිතා කරන තුරු @jmoreno ස්ථිතික පන්තිය පටවා නැත? මම විශ්වාස කරන්නේ එය සම්පාදිත වේලාවේ තොග මතකයේ ගබඩා කර ඇති බවයි. එය ක්ෂණිකව ප්‍රවේශ වේ .. එසේ නොවේ ද?
දීප්තිමත්_දෙව්

Umin ලුමිනස්_දෙව්: අවම වශයෙන් .net සඳහා, ස්ථිතික පංතියකට ප්‍රථමයෙන් ප්‍රවේශ වූ විට ක්‍රියාත්මක වන ඉදිකිරීම්කරුවෙකු ඇත, එබැවින් එය ක්ෂණිකව ප්‍රවේශ විය නොහැක. ස්ථිතික ඉදිකිරීම්කරුට න්‍යායිකව අසීමිත කාලයක් ගත විය හැකිය. එය (හෝ වෙනත් පංතියක් ගබඩා කර ඇති) ක්‍රියාත්මක කිරීමේ විස්තරයක් වන අතර එය මෙම ප්‍රශ්නයට සැබවින්ම අදාළ නොවේ.
jmoreno

22

සිංගල්ටන් එකක ඇති තවත් වාසියක් නම්, එය පහසුවෙන් අනුක්‍රමිකකරණය කළ හැකි අතර, ඔබට එහි තත්වය තැටියට සුරැකීමට අවශ්‍ය නම් හෝ දුරස්ථව එය කොතැනකට හෝ යැවිය යුතුය.


19

මම ශ්‍රේෂ් O OO න්‍යායවාදියෙක් නොවෙමි, නමුත් මා දන්නා දෙයින්, සිංගල්ටන් හා සසඳන විට ස්ථිතික පංති නොමැති එකම OO ලක්ෂණය වන්නේ බහුමාපකයයි. නමුත් ඔබට එය අවශ්‍ය නොවන්නේ නම්, ස්ථිතික පංතියක් සමඟ ඔබට ඇත්ත වශයෙන්ම උරුමය (අතුරු මුහුණත ක්‍රියාත්මක කිරීම ගැන විශ්වාස නැත) සහ දත්ත සහ ශ්‍රිත සංයුක්තකරණය තිබිය හැකිය.

මොරෙන්ඩිල්ගේ ප්‍රකාශය, “ස්ථිතික පංතියක අන්තර්ගත මෝස්තරය තනිකරම ක්‍රියා පටිපාටියකි” මම වැරදියි, නමුත් මම එකඟ නොවෙමි. ස්ථිතික ක්‍රම වලදී ඔබට ස්ථිතික සාමාජිකයින්ට ප්‍රවේශ විය හැකිය, එය ඔවුන්ගේ තනි අවස්ථාවන්හි සාමාජිකයින්ට ප්‍රවේශ වන සිංගල්ටන් ක්‍රමයට සමාන වේ.

සංස්කරණය කරන්න:
මම දැන් සිතන්නේ තවත් වෙනසක් වන්නේ ස්ථිතික පංතියක් වැඩසටහන් ආරම්භයේදීම ක්ෂණිකව ක්‍රියාත්මක වන අතර වැඩසටහනේ මුළු ජීවිත කාලය පුරාම ජීවත් වන අතර සිංගල්ටන් එකක් යම් අවස්ථාවක දී පැහැදිලිවම ක්ෂණිකව ක්ෂණිකව ස්ථාපනය කර විනාශ කළ හැකි බවයි.

* හෝ භාෂාව අනුව එය මුලින් භාවිතා කළ හැකි යැයි මම සිතමි.


15
ඔව්, ස්ථිතික ක්‍රම ඇති පන්තියකට පුද්ගලික ස්ථිතික ක්ෂේත්‍ර තිබිය හැකි අතර අනෙක් ඒවා රාජ්‍ය නඩත්තු කිරීම සඳහා භාවිතා කළ හැකිය (සහ ඒවායින් සමහරක් පොදු ස්ථිතික සැකසුම් / ලබා ගන්නන් හරහා සේවාදායක කේතයට නිරාවරණය කරන්න).
user289463

17

ජොන්ගේ කාරණය SomeClassනිදර්ශනය ILoggerකිරීම සඳහා ලොජර් ස්ථිතික පංතියක් නම් පහත දැක්වෙන දේ කළ නොහැක . ක්‍රියාත්මක කිරීමේ අවස්ථාවක් එහි ඉදිකිරීම්කරු වෙත ලබා දීම පන්තිය අපේක්ෂා කරයි .

පරායත්ත එන්නත් කිරීම සඳහා සිංගල්ටන් පන්තිය වැදගත් වේ.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            var someClass = new SomeClass(Logger.GetLogger());
        }


    }

    public class SomeClass 
    {
        public SomeClass(ILogger MyLogger)
        {

        }
    }

    public class Logger : ILogger
    {
        private static Logger _logger;
        private Logger() { }

        public static Logger GetLogger()
        {
            if (_logger==null)
            {
                _logger = new Logger();
            }

            return _logger;
        }

        public void Log()
        {

        }

    }


    public interface ILogger
    {
         void Log();
    }
}

13

සිංගල්ටන් යනු සාමාන්‍ය පන්තියක් වන අතර එය ක්ෂණිකව ක්‍රියාත්මක වන නමුත් එක් වරක් හා වක්‍රව සේවාදායක කේතයෙන් ලබා ගත හැකිය. ස්ථිතික පන්තිය ක්ෂණික නොවේ. මා දන්නා පරිදි ස්ථිතික ක්‍රම (ස්ථිතික පන්තියට ස්ථිතික ක්‍රම තිබිය යුතුය) ස්ථිතික නොවන ඒවාට වඩා වේගවත් වේ.

සංස්කරණය කරන්න:
FxCop කාර්ය සාධන රීති විස්තරය: "නිදර්ශන දත්ත හෝ ඇමතුම් නිදර්ශන ක්‍රම වලට ප්‍රවේශ නොවන ක්‍රම ස්ථිතික ලෙස සලකුණු කළ හැකිය (VB හි බෙදාගෙන ඇත). එසේ කිරීමෙන් පසු, සම්පාදකයා විසින් මෙම සාමාජිකයින්ට අථත්‍ය නොවන ඇමතුම් අඩවි විමෝචනය කරනු ඇත. වත්මන් වස්තු දර්ශකය ශුන්‍ය නොවන බව රක්ෂණය කරන සෑම ඇමතුමකටම ධාවන වේලාවේදී පරීක්ෂා කරන්න.මේ ප්‍රති performance ලයක් ලෙස කාර්ය සාධනය-සංවේදී කේත සඳහා මැනිය හැකි කාර්යසාධනයක් ලබා ගත හැකිය. සමහර අවස්ථාවලදී, වත්මන් වස්තු සිද්ධියට ප්‍රවේශ වීමට අපොහොසත් වීම නිරවද්‍යතා ගැටලුවක් නියෝජනය කරයි.
ස්ථිතික පංතිවල ස්ථිතික ක්‍රම සඳහාද මෙය අදාළ වේදැයි මම නොදනිමි.


11

සිංගල්ටන් ක්ෂණිකව ස්ථාපනය කර ඇත, එය ක්ෂණිකව ස්ථාපනය කර ඇත්තේ එක් අවස්ථාවක් පමණි, එබැවින් සිංගල්ටන් හි තනි එකකි .

ස්ථිතික පංතියක් තමා හැර වෙනත් කිසිවක් මගින් ක්ෂණිකව දැක්විය නොහැක.


ස්ථිතික පංතිය ජාවා තුළ ඉතා ක්ෂණිකව කළ හැකිය. Docs.oracle.com/javase/tutorial/java/javaOO/nested.html කියවන්න. මගේ පිළිතුර stackoverflow.com/a/37114702/1406510
නැනෝසොෆ්ට් ද බලන්න

8

ප්රධාන වෙනස්කම්:

  • සිංගල්ටන්ට නිදසුනක් / වස්තුවක් ඇති අතර ස්ථිතික පන්තිය ස්ථිතික ක්‍රම සමූහයකි
  • ස්ථිතික පංතිය විය නොහැකි අතර අතුරු මුහුණතක් හරහා සිංගල්ටන් දිගු කළ හැකිය.
  • SOLID මූලධර්මවල විවෘත / සමීප මූලධර්මයන්ට අනුබල දෙන සිංගල්ටන් උරුම කර ගත හැකි අතර අනෙක් අතට ස්ථිතික පංතිය උරුම කර ගත නොහැකි අතර අප විසින්ම වෙනස්කම් කළ යුතුය.
  • සිංගල්ටන් වස්තුව ක්‍රම වෙත යොමු කළ හැකි අතර ස්ථිතික පන්තියට නිදසුනක් නොමැති බැවින් පරාමිතීන් ලෙස සම්මත කළ නොහැක

7

පරීක්ෂණ දෘෂ්ටිකෝණයෙන් සිංගල්ටන් වඩා හොඳ ප්‍රවේශයකි. ස්ථිතික පංති මෙන් නොව, සිංගල්ටන්ට අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි අතර ඔබට ව්‍යාජ උදාහරණ භාවිතා කර එන්නත් කළ හැකිය.

පහත උදාහරණයෙන් මම මෙය පැහැදිලි කරමි. ඔබට ගුඩ්ප්‍රයිස් () ක්‍රමයක් ඇති අතර එය getPrice () ක්‍රමයක් භාවිතා කරයි යැයි සිතමු. ඔබ getPrice () ක්‍රමයක් තනි ක්‍රමයක් තුළ ක්‍රියාත්මක කරයි.

getPrice ක්‍රියාකාරීත්වය සපයන සිංගල්ටන්:

public class SupportedVersionSingelton {

    private static ICalculator instance = null;

    private SupportedVersionSingelton(){

    }

    public static ICalculator getInstance(){
        if(instance == null){
            instance = new SupportedVersionSingelton();
        }

        return instance;
    }

    @Override
    public int getPrice() {
        // calculate price logic here
        return 0;
    }
}

GetPrice භාවිතය:

public class Advisor {

    public boolean isGoodDeal(){

        boolean isGoodDeal = false;
        ICalculator supportedVersion = SupportedVersionSingelton.getInstance();
        int price = supportedVersion.getPrice();

        // logic to determine if price is a good deal.
        if(price < 5){
            isGoodDeal = true;
        }

        return isGoodDeal;
    }
}


In case you would like to test the method isGoodPrice , with mocking the getPrice() method you could do it by:
Make your singleton implement an interface and inject it. 



  public interface ICalculator {
        int getPrice();
    }

අවසාන සිංගල්ටන් ක්‍රියාත්මක කිරීම:

public class SupportedVersionSingelton implements ICalculator {

    private static ICalculator instance = null;

    private SupportedVersionSingelton(){

    }

    public static ICalculator getInstance(){
        if(instance == null){
            instance = new SupportedVersionSingelton();
        }

        return instance;
    }

    @Override
    public int getPrice() {
        return 0;
    }

    // for testing purpose
    public static void setInstance(ICalculator mockObject){
        if(instance != null ){
instance = mockObject;
    }

පරීක්ෂණ පන්තිය:

public class TestCalculation {

    class SupportedVersionDouble implements ICalculator{
        @Override
        public int getPrice() { 
            return 1;
        }   
    }
    @Before
    public void setUp() throws Exception {
        ICalculator supportedVersionDouble = new SupportedVersionDouble();
        SupportedVersionSingelton.setInstance(supportedVersionDouble);

    }

    @Test
    public void test() {
          Advisor advidor = new Advisor();
          boolean isGoodDeal = advidor.isGoodDeal();
          Assert.assertEquals(isGoodDeal, true);

    }

}

GetPrice () ක්‍රියාත්මක කිරීම සඳහා ස්ථිතික ක්‍රමයක් භාවිතා කිරීමේ විකල්පය අප විසින් ගනු ලැබුවහොත්, getPrice () සමච්චලයට ලක් කිරීම දුෂ්කර විය. ඔබට බල විහිළුවක් සමඟ ස්ථිතික ලෙස සමච්චල් කළ හැකිය, නමුත් සෑම නිෂ්පාදනයක්ම එය භාවිතා කළ නොහැක.


1
එය දැන් නූල් ආරක්ෂිත නොවන අතර සාමාන්‍යයෙන් ඔබ අතුරු මුහුණත ක්‍රියාත්මක කිරීමට ප්‍රවේශ වන ආකාරය අනුව නපුරුය. නිසැකවම, අතුරු මුහුණතක් තිබීම පරීක්ෂණ හැකියාව සඳහා හොඳයි - නමුත් එසේ නම් තනි පුද්ගලයකු සමඟ කරදර වන්නේ ඇයි? තනි පුද්ගලයකු වීම වළක්වා ගන්න; නිෂ්පාදන අරමුණු සඳහා එය ක්‍රියාත්මක කරන එක් පන්තියක්, පරීක්ෂණ අරමුණු සඳහා එක් ක්‍රියාත්මක කිරීමක් සහ ඔබ කරන දේ අනුව නිවැරදි අවස්ථාව එන්නත් කරන්න. සිංගල්ටන් එක එහි ඇමතුම්කරුවන්ට යුවළක් කිරීමට අවශ්‍ය නැත.
ජෝන් ස්කීට්

ප්රතිචාර සඳහා ස්තූතියි. එය නූල් ආරක්ෂිත කිරීම ඉතා සරල ය. ඊට අමතරව, මම හැඹිලි අරමුණු සඳහා සිංගල්ටන් භාවිතා කරමි.
අමීර් බාරකෙට්

1
ඔව්, තේරුමක් නැති පොදු කාර්යයක් තිබුණත්. නැවතත්, සිංගල්ටන් භාවිතා නොකිරීම සරල ය.
ජෝන් ස්කීට්

6

මෙම නිර්වචනය සමඟ මම එකඟ වෙමි:

වචනය " තනි " තේරුම යෙදුම් ජීවන චක්‍රය හරහා තනි වස්තුවකි, එබැවින් විෂය පථය යෙදුම් මට්ටමින් පවතී.

මෙම ස්ථිතික ඕනෑම වස්තු පහිටුම් දක්වනය නැහැ, ඒ නිසා විෂය පථය යෙදුම වසම් මට්ටමින් වේ.

නූල් ආරක්ෂිත වීමට මේ දෙකම ක්‍රියාත්මක කළ යුතුය.

ඔබට සිත්ගන්නාසුලු වෙනත් වෙනස්කම් සොයාගත හැකිය: සිංගල්ටන් රටාව එදිරිව ස්ථිතික පන්තිය


5

සැලකිය යුතු වෙනසක් වන්නේ සිංගල්ටන් සමඟ එන වෙනස් වූ ක්ෂණිකකරණයයි.

ස්ථිතික පංති සමඟ, එය සීඑල්ආර් විසින් නිර්මාණය කරනු ලබන අතර අපට එය පාලනය කළ නොහැක. සිංගල්ටන් සමඟ, වස්තුව ප්‍රවේශ වීමට උත්සාහ කළ පළමු අවස්ථාවේදීම එය ක්ෂණිකව ලබා ගනී.


4

බොහෝ අවස්ථාවන්හීදී, මේ දෙකෙහි ප්‍රායෝගික වෙනසක් නොමැත, විශේෂයෙන් සිංගල්ටන් උදාහරණය කිසි විටෙකත් වෙනස් නොවේ නම් හෝ ඉතා සෙමින් වෙනස් නොවේ නම් උදා.

විශේෂිත ස්ථිතික පමණක් ජාවා පන්තියට වඩා තනි වෙනසක් තවමත් සාමාන්‍ය ජාවා බෝංචි බව මම කියමි. මේ හේතුව නිසා, තවත් බොහෝ අවස්ථාවන්හිදී තනි පුද්ගලයෙකු පිළිගනු ලැබේ; එය ඇත්ත වශයෙන්ම පෙරනිමි වසන්ත රාමුවේ ක්ෂණික උපාය මාර්ගයයි. එය තනි තනිව ගමන් කරන බව පාරිභෝගිකයා දැන හෝ නොදැන සිටිය හැකිය, එය සාමාන්‍ය ජාවා බෝංචි ලෙස සලකයි. අප බොහෝ විට වසන්තයේ දකින පරිදි, අවශ්‍යතා වෙනස් වී සිංගල්ටන් එකක් මූලාකෘතියක් බවට පත්වීමට අවශ්‍ය නම්, එය පාරිභෝගිකයාට කේත වෙනසක් නොමැතිව සම්පූර්ණයෙන්ම බාධාවකින් තොරව කළ හැකිය.

ස්ථිතික පංතියක් තනිකරම ක්‍රියා පටිපාටිය විය යුතු බව වෙනත් අයෙකු කලින් සඳහන් කර ඇත. උදා: java.lang.Math. මගේ මතකයේ හැටියට, එවැනි පංතියක් කිසි විටෙකත් සම්මත නොවිය යුතු අතර ඔවුන් කිසි විටෙකත් ස්ථිතික අවසාන හැර වෙනත් කිසිවක් ගුණාංග ලෙස තබා නොගත යුතුය. අනෙක් සියල්ල සඳහා, සිංගල්ටන් එකක් භාවිතා කරන්න, එය වඩා නම්‍යශීලී සහ නඩත්තු කිරීමට පහසු බැවින්.


4

පසුපසට සම්බන්ධ වන අපගේ ඩීබී රාමුව අප සතුව ඇත. බහු පරිශීලකයින් හරහා අපිරිසිදු කියවීම් වළක්වා ගැනීමට අපි ඕනෑම වේලාවක තනි අවස්ථාවක් ලබා ගත හැකි බව සහතික කිරීම සඳහා අපි සිංගල්ටන් රටාව භාවිතා කර ඇත්තෙමු.

C # හි ස්ථිතික පන්තියකට අතුරු මුහුණතක් ක්‍රියාත්මක කළ නොහැක. ව්‍යාපාර ගිවිසුම් හෝ අයිඕසී අරමුණු සඳහා තනි උදාහරණ පන්තියකට අතුරු මුහුණතක් ක්‍රියාත්මක කිරීමට අවශ්‍ය වූ විට, ස්ථිතික පන්තියකින් තොරව මම සිංගල්ටන් රටාව භාවිතා කරමි.

අස්ථායි තත්වයන් තුළ තත්වය පවත්වා ගැනීමට සිංගල්ටන් ක්‍රමයක් සපයයි

ඔබට උපකාරී වන බලාපොරොත්තුව ..


4

ස්ථිතික පන්තියෙන් වෙනස

ජේඩීකේට සිංගල්ටන් සහ ස්ථිතික යන දෙකටම උදාහරණ ඇත, එක් අතකින් java.lang.Mathස්ථිතික ක්‍රම සහිත අවසාන පන්තියකි, අනෙක් පැත්තෙන් java.lang.Runtimeසිංගල්ටන් පන්තියකි.

සිංගල්ටන් වල වාසි

  • සිංගල්ටන් රටාවට වඩා රාජ්‍යය පවත්වා ගැනීමේ අවශ්‍යතාවය ස්ථිතික පන්තියට වඩා හොඳ තේරීමක් නම්, ස්ථිතික පංතියේ තත්වය පවත්වා ගැනීම දෝෂ වලට, විශේෂයෙන් සමගාමී පරිසරය තුළ, බහු නූල් මගින් ප්‍රමාණවත් සමමුහුර්තකරණය සමාන්තර වෙනස් කිරීමකින් තොරව ධාවන තත්වයන්ට මඟ පෑදිය හැකි බැවිනි.

  • සිංගල්ටන් පංතියේ බර වස්තුවක් නම් කම්මැලි පැටවිය හැකි නමුත් ස්ථිතික පන්තියට එවැනි වාසි නොමැති අතර සෑම විටම උනන්දුවෙන් පටවනු ලැබේ.

  • සිංගල්ටන් සමඟ, ඔබට මූලික පන්තියක් දීර් extend කිරීමට, අතුරු මුහුණතක් ක්‍රියාත්මක කිරීමට සහ විවිධ ක්‍රියාත්මක කිරීම් සැපයීමට උරුමය සහ බහුමාපකය භාවිතා කළ හැකිය.

  • ජාවා හි ස්ථිතික ක්‍රම ඉක්මවා යා නොහැකි බැවින් ඒවා නම්යශීලීභාවයට හේතු වේ. අනෙක් අතට, සිංගල්ටන් පංතියේ අර්ථ දක්වා ඇති ක්‍රම දීර් ing කිරීමෙන් ඔබට එය අභිබවා යා හැකිය.

ස්ථිතික පන්තියේ අවාසි

  • ස්ථිතික පන්තියට වඩා සිංගල්ටන් සඳහා ඒකක පරීක්ෂණය ලිවීම පහසුය, මන්ද ඔබට සිංගල්ටන් බලාපොරොත්තු වන සෑම විටම ව්‍යාජ වස්තුවක් සමත් විය හැකිය.

ස්ථිතික පන්තියේ වාසි

  • ස්ථිතික ක්‍රම සම්පාදනය කරන වේලාවට බන්ධනය වී ඇති නිසා ස්ථිතික පන්තිය සිංගල්ටන්ට වඩා හොඳ කාර්ය සාධනයක් සපයයි.

සිංගල්ටන් රටාව සාක්ෂාත් කර ගැනීම සඳහා වාසි සහ අවාසි කිහිපයක් ඇත.

  • තනි පැටවීමක් උනන්දුවෙන් පැටවීම
  • දෙවරක් පරීක්ෂා කළ අගුලු දැමීමේ සිංගල්ටන්
  • ආරම්භක-ඉල්ලුම දරන්නාගේ මෝඩකම
  • එනුම් පදනම් කරගත් සිංගල්ටන්

සවිස්තරාත්මක විස්තරය ඒ සෑම එකක්ම වාචික බැවින් මම හොඳ ලිපියකට සබැඳියක් තැබුවෙමි - ඔබට සිංගල්ටන් ගැන දැන ගැනීමට අවශ්‍ය සියල්ල


3
  1. කම්මැලි පැටවීම
  2. වෙනම ක්‍රියාත්මක කිරීමක් සැපයිය හැකි වන පරිදි අතුරුමුහුණත් සඳහා සහාය
  3. ව්‍යුත්පන්න වර්ගය නැවත ලබා ගැනීමේ හැකියාව (කම්මැලි පැටවීම සහ අතුරු මුහුණත ක්‍රියාත්මක කිරීමේ එකතුවක් ලෙස)

කැදැලි ස්ථිතික පන්තියට ජාවා තුළ අතුරු මුහුණත ක්‍රියාත්මක කළ හැකිය. ඔබේ දෙවන කරුණ වැරදිය.
නැනෝසොෆ්ට්

3

ඒ. අනුක්‍රමිකකරණය - ස්ථිතික සාමාජිකයන් පන්තියට අයත් වන අතර එබැවින් අනුක්‍රමිකකරණය කළ නොහැක.

බී. අප විසින් ඉදිකිරීම්කරු පුද්ගලික කර ඇති නමුත් ස්ථිතික සාමාජික විචල්‍යයන් තවමත් උප පංතියට ගෙන යනු ඇත.

ඇ. අපට කම්මැලි ආරම්භයක් කළ නොහැකි බැවින් සියල්ල පැටවෙන්නේ පන්ති පැටවීමේදී පමණි.


3

සේවාදායකයාගේ දෘෂ්ටි කෝණයෙන්, ස්ථිතික හැසිරීම සේවාදායකයාට දන්නා නමුත් සිංගල්ටන් හැසිරීම සේවාදායකයකුගෙන් සැඟවිය හැක. ඔහු නැවත නැවතත් සෙල්ලම් කරන එකම එක් අවස්ථාවක් පමණක් සේවාදායකයා නොදැන සිටිය හැකිය.


3

මම පහත සඳහන් දේ කියවා එය අර්ථවත් යැයි සිතමි:

ව්‍යාපාර රැකබලා ගැනීම

මතක තබා ගන්න, වඩාත්ම වැදගත් OO රීති වලින් එකක් වන්නේ වස්තුවක් තමාටම වගකිව යුතු බවයි. මෙයින් අදහස් කරන්නේ පන්තියක ජීවන චක්‍රය පිළිබඳ ගැටළු පන්තිය තුළ හැසිරවිය යුතු අතර ස්ථිතික වැනි භාෂා ව්‍යුහයන්ට පවරා නොමැති බවයි.

Objected-Oriented Think Process 4 වන සංස්කරණය.


මම එකඟ නොවෙමි, මෙය සැබවින්ම පන්තියට වගකීමක් එක් කරන බැවින් (එය ඕනෑම දෙයක් කරයි යැයි උපකල්පනය කරයි) එයින් අදහස් කරන්නේ එය දැන් තනි වගකීම් මූලධර්මය උල්ලං lates නය කරන බවයි.
ssmith

3

මම ලියූ ලිපියක, ස්ථිතික පන්තියකට වඩා සිංගල්ටන් වඩා හොඳ වන්නේ මන්ද යන්න පිළිබඳ මගේ දෘෂ්ටිකෝණය විස්තර කර ඇත:

  1. ස්ථිතික පංතිය ඇත්ත වශයෙන්ම කැනොනිකල් පන්තියක් නොවේ - එය ශ්‍රිත හා විචල්‍යයන් සහිත නාම අවකාශයකි
  2. වස්තු-නැඹුරු වැඩසටහන්කරණ මූලධර්ම බිඳ දැමීම නිසා ස්ථිතික පන්තිය භාවිතා කිරීම හොඳ පුරුද්දක් නොවේ
  3. ස්ථිතික පංතිය වෙනත් පරාමිතියක් ලෙස සම්මත කළ නොහැක
  4. “කම්මැලි” ආරම්භය සඳහා ස්ථිතික පන්තිය සුදුසු නොවේ
  5. ස්ථිතික පංතිය ආරම්භ කිරීම සහ භාවිතා කිරීම සැමවිටම දුෂ්කර ය
  6. නූල් කළමනාකරණය ක්‍රියාත්මක කිරීම දුෂ්කර ය

මම එය ඉංග්‍රීසි ව්‍යාකරණ සඳහා යොදා ගන්නෙමි, නමුත් වෙනත් ආකාරයකින් එය සිත්ගන්නාසුලු කියවීමකි :)
Noctis

3
  1. අපට සිංගල්ටන් පංතියේ වස්තුව නිර්මාණය කර එය ක්‍රමයට යොමු කළ හැකිය.

  2. සිංගල්ටන් පන්තිය උරුමය සීමා නොකරයි.

  3. අපට ස්ථිතික පංතියක වස්තු බැහැර කළ නොහැකි නමුත් තනි පන්තියකට හැකිය.


සෑම විටම එකක් පමණක් ඇති අතර සෑම විටම ස්ථිතික සඳහනක් තිබේ නම් සිංගල්ටන් ක්‍රමයක් ක්‍රමයකට යොමු කිරීමෙන් ඇති ප්‍රයෝජනය කුමක්ද?
ආරොන් ෆ්‍රෑන්ක්

2

තනි ස්ථිතික පංති අවස්ථාවක් (එනම්, ස්ථිතික හෝ ගෝලීය විචල්‍යයක් වන පන්තියක තනි අවස්ථාවක්) සහ තනි ස්ථිතික දර්ශකයක් අතර විශාල වෙනසක් ඇත. මත පන්තියේ නිදසුනක් :

ඔබගේ යෙදුම පිටවන විට, ස්ථිතික පන්තියේ නිදසුන විනාශ කරන්නා ලෙස හැඳින්වේ. ඒ කියන්නේ ඔබ එම ස්ථිතික අවස්ථාව සිංගල්ටන් ලෙස භාවිතා කළේ නම්, ඔබේ සිංගල්ටන් නිසි ලෙස ක්‍රියා කිරීම නවතා දැමීය. එම සිංගල්ටන් භාවිතා කරන කේත ධාවනය තවමත් තිබේ නම්, උදාහරණයක් ලෙස වෙනත් ත්‍රෙඩ් එකක, එම කේතය බිඳ වැටීමට ඉඩ ඇත.


1
යෙදුමෙන් පිටව ගියහොත් සිංගල්ටන් තවමත් මතකයේ පවතින්නේද?
නැනෝසොෆ්ට්

මම හිතන්නේ ඔබ අදහස් කරන්නේ ඔබේ වර්තමාන නූල් පිටවන විට මිස යෙදුම නොවේද? යෙදුම පිටව ගියහොත්, වෙනත් ත්‍රෙඩ් එකකින් කිසිවක් භාවිතා කිරීමට ක්‍රමයක් නොමැත.
ටොම් බ්‍රිටෝ

2

මගේ හිසෙහි වෙනස වන්නේ වස්තු දිශානත වැඩසටහන්කරණය (සිංගල්ටන් / මූලාකෘති) හෝ ක්‍රියාකාරී වැඩසටහන්කරණය (ස්ථිතික) ක්‍රියාත්මක කිරීමයි.

අපි අවධානය යොමු කළ යුත්තේ සිංගල්ටන් රටාව මගින් නිර්මාණය කරන ලද වස්තූන් ගණන කෙරෙහි ය. අප අවධානය යොමු කළ යුත්තේ අවසානයේ දී අප වස්තුවක් රඳවා තබා ගැනීමයි. අනෙක් අය දැනටමත් පවසා ඇති පරිදි, එය දීර්, කළ හැකිය, පරාමිතියක් ලෙස සම්මත කළ හැකි නමුත් වඩාත්ම වැදගත් දෙය එය රාජ්‍යයෙන් පිරී තිබීමයි.

අනෙක් අතට ක්‍රියාකාරී වැඩසටහන් ක්‍රියාත්මක කිරීම සඳහා ස්ථිතික භාවිතා වේ. ස්ථිතික සාමාජිකයන් පන්තියකට අයත් වේ. ඔවුන් අස්ථායි.

මාර්ගය වන විට ඔබට තනි ස්ථිතික පන්ති නිර්මාණය කළ හැකි බව ඔබ දැන සිටියා :)


තනි පන්තියක් සෑම විටම පන්තියේ ස්ථිතික සඳහනක් ඇති බැවින් පරාමිතියක් ලෙස සම්මත කිරීමේ තේරුම කුමක්ද?
ආරොන් ෆ්‍රෑන්ක්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.