සිංගල්ටන් ගැන එතරම් නරක කුමක්ද? [වසා ඇත]


1989

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

තොග පිටාර ගැලීම විශේෂයෙන් සිංගල්ටන් නපුරු යැයි සියලු දෙනා එකඟ වන බව උපකල්පනය කරයි. මන්ද?

කරුණාකර ඔබේ පිළිතුරු " කරුණු, යොමු කිරීම් හෝ විශේෂිත විශේෂ ise තාවයෙන් " සහාය දෙන්න


6
කේතය අනුවර්තනය වීමට මා උත්සාහ කළ බැවින් සිංගල්ටන් මෝස්තරයක් භාවිතා කිරීම මෑතකදී මා පිළිස්සී ඇති බව මට කිව යුතුය. මම මගේ නිදහස් කාලය තුළ එය කරන විට, මම මෙය නැවත සකස් කිරීමට කම්මැලි ය. Tivity ලදායිතාව සඳහා නරක ආරංචියක්.
මාකින්

71
පිළිතුරු වල 'අවාසි' රාශියක් ඇත, නමුත් රටාව හොඳ වූ විට, අයහපතට වඩා වෙනස්ව හොඳ උදාහරණ කිහිපයක් දැකීමට මා කැමතිය ...
DGM

50
මම මීට මාස කිහිපයකට පෙර බ්ලොග් සටහනක් ලිව්වෙමි : jalf.dk/blog/2010/03/… - මට එය කෙළින්ම කියන්නට ඉඩ දෙන්න. සිංගල්ටන් යනු නිවැරදි විසඳුම වන තනි තත්වයක් ගැන මට පෞද්ගලිකව සිතිය නොහැකිය. එයින් අදහස් කරන්නේ එවැනි තත්වයක් නොපවතින නමුත් ... ඔවුන් දුර්ලභ යැයි හැඳින්වීම අඩු තක්සේරුවකි.
jalf

8
D ඇඩම්ස්මිත් එයින් අදහස් කරන්නේ ඔබ එසේ කළ යුතු බව නොවේ, නමුත් එයින් අදහස් කරන්නේ ඔබට එය එසේ ලබා ගත හැකි බවයි. ඔබ එය එසේ ප්‍රවේශ කිරීමට අදහස් නොකරන්නේ නම්, එය මුලින් ම තනි පුද්ගලයකු බවට පත් කිරීමට හේතුවක් නැත. එබැවින් ඔබේ තර්කය effectively ලදායී ලෙස "අපි සිංගල්ටන් එකක් සෑදීමෙන් කිසිදු හානියක් නැත. අපි එය සිංගල්ටන් එකක් ලෙස සලකන්නේ නැත්නම්. ඔව්, නියමයි. මම රිය පැදවූයේ නැත්නම් මගේ මෝටර් රථය දූෂණය නොවේ. නමුත් එය පහසුය මුලින් වාහනයක් ලබා නොගන්න.;) (සම්පූර්ණ අනාවරණය: මට ඇත්ත වශයෙන්ම මෝටර් රථයක් නොමැත)
jalf

35
මෙම සමස්ත මාතෘකාවේ නරකම දෙය නම්, තනි පුද්ගලයන්ට වෛර කරන පුද්ගලයින් ඒ වෙනුවට භාවිතා කළ යුතු දේ සඳහා ස්ථිර යෝජනා ලබා දෙන්නේ කලාතුරකිනි. මෙම SO ලිපිය හරහා ජර්නල් ලිපි සහ ස්වයං ප්‍රකාශිත බ්ලොග් වලට ඇති සබැඳි, නිදසුනක් ලෙස, තනි බොත්තම් භාවිතා නොකිරීමට හේතුව ගැන ඉදිරියට යන්න (ඒවා සියල්ලම විශිෂ්ට හේතු), නමුත් ඒවා ප්‍රතිස්ථාපනය කිරීමේදී අතිශයින්ම සිහින් ය. අත් සේදීම ගොඩක්. නව ක්‍රමලේඛකයන්ට ඉගැන්වීමට උත්සාහ කරන අප සිංගල්ටන් භාවිතා නොකරන්නේ මන්දැයි පෙන්වා දීමට හොඳ තෙවන පාර්ශවීය ප්‍රති-සාම්පල නොමැති අතර, පෙන්වා දීමට උදාහරණ පමණි. එය වෙහෙසකරයි.
Ti Strga

Answers:


1297

බ්‍රයන් බොත්තමෙන් අක්ෂර වින්‍යාසය:

  1. ඒවා සාමාන්‍යයෙන් ගෝලීය නිදසුනක් ලෙස භාවිතා කරයි, එය එතරම් නරක ඇයි? ඔබගේ යෙදුමේ පරායත්තයන් අතුරුමුහුණත් හරහා නිරාවරණය කරනවා වෙනුවට ඔබේ කේතයේ සඟවා ඇති බැවිනි. එය පසුකර යාම වළක්වා ගැනීම සඳහා ගෝලීය දෙයක් සෑදීම කේත සුවඳකි .

  2. ඔවුන් තනි වගකීම් මූලධර්මය උල්ලං late නය කරයි: ඔවුන් තමන්ගේම නිර්මාණය හා ජීවන චක්‍රය පාලනය කරයි යන කාරණයෙන්.

  3. ඒවා සහජයෙන්ම කේතය තදින් සම්බන්ධ කිරීමට හේතු වේ. මෙය බොහෝ අවස්ථාවන්හිදී ඔවුන්ව පරීක්ෂාවට ලක් කිරීම තරමක් අපහසු කරයි.

  4. යෙදුමේ ජීවිත කාලය පුරාම ඔවුන් රාජ්‍යය ගෙන යයි. පරීක්ෂණ ඇණවුම් කළ යුතු තත්වයක් සමඟ ඔබට අවසන් විය හැකි බැවින් එය පරීක්‍ෂණයට තවත් පහරක් වන අතර එය ඒකක පරීක්ෂණ සඳහා විශාල සංඛ්‍යාවක් නොවේ. මන්ද? සෑම ඒකක පරීක්ෂණයක්ම අනෙකාගෙන් ස්වාධීන විය යුතු බැවිනි.


325
මම ඔබ සමඟ එකඟ නොවෙමි. අදහස් දැක්වීමට අවසර දී ඇත්තේ අක්ෂර 600 ක් පමණක් බැවින්, මේ පිළිබඳව අදහස් දැක්වීමට මම බ්ලොග් සටහනක් ලියා ඇත, කරුණාකර පහත සබැඳිය බලන්න. jorudolph.wordpress.com/2009/11/22/singleton-considerations
ජොහැන්නස් රුඩොල්ෆ්

61
1 සහ 4 යන කරුණු වලදී, මම සිතන්නේ සිංගල්ටන්ස් ප්‍රයෝජනවත් වන අතර ඇත්ත වශයෙන්ම දත්ත හැඹිලිය සඳහා (විශේෂයෙන් ඩීබී වෙතින්) පරිපූර්ණයි. කාර්ය සාධනය වැඩිවීම ආකෘති ආකෘති පරීක්ෂණවල ඇති සංකීර්ණතාවයන් ඉක්මවා යයි.
ඩේ බොක්

56
Ai ඩයි බොක්: "දත්ත හැඹිලි (විශේෂයෙන් ඩීබී එකකින්)" මෙය කිරීමට ප්‍රොක්සි රටාව භාවිතා කරන්න ...
paxos1977

56
නියමයි, විශිෂ්ට ප්‍රතිචාර. මම බොහෝ විට මෙහි අධික ලෙස ආක්‍රමණශීලී වචන භාවිතා කර ඇති නිසා කරුණාකර මතක තබා ගන්න මම නිෂේධාත්මකව සැකසූ ප්‍රශ්නයකට පිළිතුරු දුන් බව. මගේ පිළිතුරෙන් අදහස් කළේ නරක සිංගල්ටන් භාවිතයෙන් සිදුවන 'ප්‍රති-රටාවන්' පිළිබඳ කෙටි ලැයිස්තුවකි. සම්පූර්ණ අනාවරණය; මමත් වරින් වර සිංගල්ටන් භාවිතා කරමි. SO හි වඩාත් මධ්‍යස්ථව අසන ප්‍රශ්න ඇති අතර එය සිංගල්ටන් හොඳ අදහසක් ලෙස සැලකිය හැකි අවස්ථාවන් සඳහා විශිෂ්ට සංසදයක් වනු ඇත. උදාහරණයක් ලෙස, stackoverflow.com/questions/228164/…
ජිම් බර්ගර්

21
බහු තෙරපුම් පරිසරයක හැඹිලි කිරීම සඳහා ඒවා එතරම් විශිෂ්ට නොවේ. සීමිත සම්පතක් මත සටන් කරන බහු නූල් සහිත හැඹිලියක් ඔබට පහසුවෙන් පරාජය කළ හැකිය. [නඩත්තු කරනු ලබන්නේ තනි පුද්ගලයෙකි]
භික්ෂුව

450

තනි (සහ එකම) ගැටළුවක් තනි තනිව විසඳයි.

සම්පත් සම්බන්ධතා.

ඔබට යම් සම්පතක් තිබේ නම්

( 1 ) තිබිය හැක්කේ එක් අවස්ථාවක් පමණි, සහ

( 2 ) ඔබ එම තනි අවස්ථාව කළමනාකරණය කළ යුතුය,

ඔබට තනි පුද්ගලයෙක් අවශ්‍යයි .

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

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

ඔබට ගෝලීය අවශ්‍ය යැයි ඔබ සිතන විට, ඔබ බොහෝ විට භයානක නිර්මාණ වැරැද්දක් කරයි.


43
දෘඩාංග ද උදාහරණයකි නේද? කාවැද්දූ පද්ධතිවල සිංගල්ටන් භාවිතා කළ හැකි දෘඩාංග රාශියක් ඇත - නැතහොත් එක් විශාල එකක්ද? <grin>
ජෙෆ්

170
සම්පූර්ණයෙන්ම එකඟයි. "මෙම පරිචය නරකයි" යන අධිෂ් determined ාන සහගත කතා රාශියක් ඇත. බොහෝ විට, පුරුද්ද "නරක" වන්නේ එය නිතර අනිසි ලෙස භාවිතා කරන බැවිනි. සිංගල්ටන් රටාව නිසි ලෙස යොදන තාක් කල් සහජයෙන්ම වැරැද්දක් නැත.
දමොවිසා

53
තාත්වික, මූලධර්මීය තනි බොත්තම් ඉතා දුර්ලභ ය (මුද්‍රණ පෝලිම් නිසැකවම එකක් නොවේ, සහ ලොග් ගොනුවක් ද නොවේ - ලොග් 4 ජේ බලන්න). බොහෝ විට දෘඩාංග යනු මූලධර්මයට වඩා අහම්බෙන් සිදු වූ තනි ය. පරිගණකයකට සම්බන්ධ සියලුම දෘඩාංග අහම්බෙන් සිංගල්ටන් එකක් වේ (බහු මොනිටර, මීයන්, මුද්‍රණ යන්ත්‍ර, ශබ්ද කාඩ්පත් සිතන්න). 500 mio $ අංශු අනාවරකය පවා අහම්බෙන් හා අයවැය බාධක මගින් තනි ඒකකයක් වේ - ඒවා මෘදුකාංගයට අදාළ නොවේ, එබැවින්: තනි පුද්ගලයෙක් නැත. විදුලි සංදේශ වලදී, දුරකථන අංකය හෝ භෞතික දුරකථනය තනි බොත්තම් නොවේ (ISDN, ඇමතුම් මධ්‍යස්ථානය සිතන්න).
digitlarbeiter

23
දෘඩාංග සතුව විවිධ සම්පත් වල එක් අවස්ථාවක් පමණක් තිබිය හැකි නමුත් දෘඩාංග යනු මෘදුකාංග නොවේ. සංවර්ධන මණ්ඩලයේ තනි අනුක්‍රමික වරායක් සිංගල්ටන් ලෙස ආදර්ශනය කිරීමට කිසිදු හේතුවක් නැත. ඇත්ත වශයෙන්ම, එය ආකෘතිගත කිරීම මඟින් වරායන් දෙකක් ඇති නව මණ්ඩලයට වරාය කිරීම දුෂ්කර වනු ඇත!
dash-tom-bang

19
ඉතින් ඔබ සමාන පන්ති දෙකක් ලිවීමට, කේත විශාල ප්‍රමාණයක් අනුපිටපත් කරමින්, ඔබට වරායන් දෙකක් නියෝජනය කරන තනි බොත්තම් දෙකක් තිබිය හැකිද? ගෝලීය අනුක්‍රමික වස්තු දෙකක් භාවිතා කිරීම ගැන කුමක් කිව හැකිද? දෘඩාංග කිසිසේත් පන්ති ලෙස ආකෘතිකරණය නොකිරීම ගැන කුමක් කිව හැකිද? ගෝලීය ප්‍රවේශය ද අඟවන ඔබ තනි බොත්තම් භාවිතා කරන්නේ ඇයි? ඔබගේ කේතයේ සෑම කාර්යයක්ම අනුක්‍රමික වරායට ප්‍රවේශ වීමට ඔබට අවශ්‍යද ?
jalf

352

සමහර කේතීකරණ ස්නෝබ් ඒවා උත්කර්ෂවත් ගෝලීය ලෙස සලකයි. බොහෝ අය ගොටෝ ප්‍රකාශයට වෛර කරන ආකාරයටම , ගෝලීය භාවිතා කිරීමේ අදහසට වෛර කරන තවත් අය සිටිති . සංවර්ධකයින් කිහිප දෙනෙකු ගෝලීය වළක්වා ගැනීම සඳහා අසාමාන්‍ය දුරක් යන බව මම දැක ඇත්තෙමි . අමුතු නමුත් ඇත්ත.

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


17
සිංගල්ටන් හි මා දකින අසාර්ථකත්වය නම්, මිනිසුන් කෙසේ හෝ “වඩා හොඳ” නිසා ගෝලීය ඒවා වෙනුවට ඒවා භාවිතා කිරීමයි. ගැටලුව වන්නේ (මා දකින පරිදි), මෙම අවස්ථා වලදී සිංගල්ටන් විසින් මේසය වෙත ගෙන එන දේවල් අදාල නොවේ. (ඉදිකිරීම්-on-පළමු භාවිතය එය ඇත්තෙන්ම එය එසේ කිරීමට ඉදිකිරීමටත් භාවිතා කර නොමැති විට පවා, උදාහරණයක් ලෙස,-කටය නොවන ක්රියාත්මක කිරීමට සුළු වේ.)
ඩෑෂ්-ටොම්-පිපුරුම්

21
"අපි" ඔවුන්ව පහත් කොට සැලකීමට හේතුව, ඔවුන් වැරදි ලෙස භාවිතා කර ඇති බව "අපි" නිතරම දකිමු. "අපි" දන්නවා ඔවුන්ට හේතුව ඇති තැන.
Bjarke Freund-Hansen

5
H ෆිල්, ඔබ කියා සිටියේ "වරින් වර ඔබට එය හොඳම විසඳුම බව පෙනී යා හැකි බැවින් එය භාවිතා කරන්න" යනුවෙනි. හරි, ඉතින් හරියටම කුමන අවස්ථාවකදී අපට සිංගල්ටන් එකක් ප්‍රයෝජනවත් වේද?
පැසීරියර්

23
Ac පැකේරියර්, පහත සඳහන් සියලු කොන්දේසි පවතින සෑම අවස්ථාවකම: (1) ඔබට අවශ්‍ය වන්නේ එකක් පමණි, (2) ක්‍රම ඇමතුම් විශාල සංඛ්‍යාවක තර්කයක් ලෙස එම එක සම්මත කළ යුතුය, (3) ඔබ පිළිගැනීමට කැමති සෑම තැනකම අශෝභන දේ පසු නොකිරීමෙන් ඔබේ කේතයේ ප්‍රමාණය හා සංකීර්ණතාව ක්ෂණිකව අඩු කිරීම සඳහා යම් දවසක ප්‍රතික්‍රියාකාරක කිරීමට ඇති අවස්ථාව.
ඇන්ටිනෝම්

18
මෙය කිසිම දෙයකට පිළිතුරු දෙන බව මට හැඟෙන්නේ නැත, එය පවසන්නේ 'සමහර විට එය ගැළපේ, වෙනත් වේලාවක එය නොගැලපේ' යන්නයි. හරි, නමුත් ඇයි, කවදාද? මෙම පිළිතුර මධ්‍යස්ථභාවයට තර්කයකට වඩා වැඩි වන්නේ කුමක් ද ?
ගිල්ඩන්ස්ටර්න්

219

ගූගල් වෙතින් මිස්කෝ හෙවරි, හරියටම මෙම මාතෘකාව පිළිබඳ රසවත් ලිපි කිහිපයක් ඇත ...

සිංගල්ටෝන යනු ව්යාධිජනක බොරුකාරයින්ට ඒකක පරීක්ෂණ උදාහරණයක් ඇත, එය තනි පුද්ගලයන්ට යැපුම් දාමයන් හඳුනා ගැනීමට අපහසු වන අතර යෙදුමක් ආරම්භ කිරීම හෝ පරීක්ෂා කිරීම නිරූපණය කරයි. එය අපයෝජනයට තරමක් ආන්තික උදාහරණයකි, නමුත් ඔහු ඉදිරිපත් කරන කාරණය තවමත් වලංගු වේ:

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

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


8
මෙම විෂය පිළිබඳ මිස්කෝගේ ලිපි මේ මොහොතේ ඒ වටා ඇති හොඳම දේ වේ.
ක්‍රිස් මේයර්

22
පළමු සබැඳිය ඇත්ත වශයෙන්ම තනි බොත්තම් සමඟ ගැටළුවක් විසඳන්නේ නැත, නමුත් පන්තිය තුළ ස්ථිතික යැපීමක් උපකල්පනය කරයි. පරාමිතීන් පසු කිරීමෙන් ලබා දී ඇති උදාහරණය නිවැරදි කළ හැකි නමුත් තවමත් තනි බොත්තම් භාවිතා කරන්න.
DGM

17
@DGM: හරියටම - ඇත්ත වශයෙන්ම, ලිපියේ 'තාර්කික' කොටස අතර විශාල තාර්කික විසන්ධි වීමක් ඇති අතර, 'සිංගල්ටන් යනු හේතුව' කොටසයි.
හාපර් ෂෙල්බි

1
මිස්කෝගේ ක්‍රෙඩිට් කාඩ් ලිපිය මෙම රටාව අනිසි ලෙස භාවිතා කිරීම පිළිබඳ අන්ත උදාහරණයකි.
ඇලෙක්ස්

2
දෙවන ලිපිය කියවීම සිංගල්ටන් ඇත්ත වශයෙන්ම විස්තර කර ඇති වස්තු ආකෘතියේ කොටසකි. කෙසේ වෙතත්, ගෝලීය වශයෙන් ප්‍රවේශ වීම වෙනුවට මේවා කර්මාන්තශාලා වස්තූන් සඳහා පුද්ගලික වේ.
FruitBreak

122

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

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


20
යෙදුම පුරාම ලබා ගත හැකි එක් අවස්ථාවක් කුමක්ද? ඔහ්. ගෝලීය . "කටය නොවන එතුම globals කිරීමට රටාවක්" එක්කෝ බොළඳ හෝ නොමඟ යවන ලෙස නිර්වචනය විසින් , රටාව පන්ති ගෝලීය උදාහරණයක් පමණ හකුළා.
cHao

26
ඇත්ත වශයෙන්ම ඔබේ යෙදුම ආරම්භ වන විට පන්තියේ එක් අවස්ථාවක් නිර්මාණය කිරීමට ඔබට නිදහස ඇති අතර, එම අවස්ථාව අතුරු මුහුණතක් හරහා එය භාවිතා කරන ඕනෑම දෙයකට එන්නත් කරන්න. එකක් පමණක් තිබිය හැකි බව ක්‍රියාත්මක කිරීම නොසලකයි.
ස්කොට් විට්ලොක්

4
Ain ඩේනියස්: අවසානයේ ඇත්ත වශයෙන්ම නැහැ. නිසැකවම, ඔබට අත්තනෝමතික ලෙස වෙනත් අවස්ථාවක් ආදේශ කිරීමට නොහැකි වේ. (විට එම facepalm ඇතිකරවන අවස්ථාවලදී හැර ඔබ ඇත්තෙන්ම මම දැකලා තියෙනවා. setInstanceපෙර ක්රම.) නමුත්, කිසිසේත් වැදගත් ඒ - ඒ weenie "අවශ්ය" A ය කටය ද encapsulation හෝ දේ වෙලා තියෙන්නේ ගැන බයවෙලා දෙයක් දන්නේ නැහැ කියලා විකෘති ගෝලීය රාජ්‍යය, එබැවින් ඔහු සෑම කෙනෙකුටම උපකාරක (?) ලබා දුන්නේය. තනි. ක්ෂේත්‍රය. (ඔව්, මෙය සිදු වේ. බොහෝ දේ . මම වනාන්තරයේ මෙතෙක් දැක ඇති සෑම
තනිවම

4
Ain ඩේනියස්: විශාල වශයෙන්, අපට දැනටමත් තිබේ. “උරුමයට වඩා සංයුතියට වැඩි කැමැත්තක් දැක්වීම” දැන් සෑහෙන කාලයක් තිස්සේ පවතින දෙයක්. උරුමය විට නමුත් පැහැදිලි ලෙසම හොඳම විසඳුම, ඔබ එය භාවිතා කිරීමට නිදහස ඇත. Singletons, globals, ආවේ සමග එකම දෙයක් gotoඔවුන් විය හැකි, ආදිය වැඩ ඔබ සාම්ප්රදායික ප්රඥාව යන්න කිරීමට අවශ්ය නම්, ඔබ වඩා හොඳ කොහොමද ඔබගේ ප්රවේශය පෙන්නුම් කිරීමට හැකි වනු ඇත - බොහෝ අවස්ථාවල දී, නමුත් අවංකව, ප්රමාණවත් නොවේ "වැඩ" ය වඩා හොඳ සාම්ප්රදායික විසඳුම් වඩා. සිංගල්ටන් රටාව සඳහා එවැනි අවස්ථාවක් මම තවම දැක නැත.
cHao

3
අපි එකිනෙකා පසුකරමින් කතා නොකිරීමට, මම කතා කරන්නේ ගෝලීය වශයෙන් ලබා ගත හැකි අවස්ථාවක් ගැන නොවේ. ඒ සඳහා ඕනෑ තරම් නඩු තිබේ. මා කතා කරන්නේ (විශේෂයෙන් මම "කැපිටල්-එස් සිංගල්ටන්" යැයි කියන විට) ගොෆ් හි සිංගල්ටන් රටාව වන අතර එය එම තනි ගෝලීය අවස්ථාව පන්තිය තුළම කාවැද්දූ අතර එය ඒ getInstanceහා සමාන ආකාරයකින් නම් කරන ලද ක්‍රමවේදයක් මගින් නිරාවරණය කරයි . දෙවන අවස්ථාව. අවංකවම, එම අවස්ථාවේදී, ඔබට එක අවස්ථාවක්වත් නොතිබිය හැකිය .
cHao

72

සිංගල්ටන් ගැන තරමක් නරක දෙයක් නම් ඔබට ඒවා ඉතා පහසුවෙන් දිගු කළ නොහැකි වීමයි. ඔබට ඔවුන්ගේ හැසිරීම වෙනස් කිරීමට අවශ්‍ය නම් මූලික වශයෙන් යම් ආකාරයක සැරසිලි රටාවක් හෝ එවැනි දෙයක් සෑදිය යුතුය. එසේම, එක් දිනක් ඔබට එම එක් දෙයක් කිරීමට විවිධ ක්‍රම තිබිය යුතු නම්, ඔබ ඔබේ කේතය සකස් කරන ආකාරය මත පදනම්ව වෙනස් කිරීම තරමක් වේදනාකාරී විය හැකිය.

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

එබැවින් මූලික වශයෙන්:

public MyConstructor(Singleton singleton) {
    this.singleton = singleton;
}

ඊට වඩා:

public MyConstructor() {
    this.singleton = Singleton.getInstance();
}

මෙම රටාව පරායත්ත එන්නත් කිරීම ලෙස හැඳින්වෙන අතර එය සාමාන්‍යයෙන් හොඳ දෙයක් ලෙස සැලකේ.

ඕනෑම රටාවක් මෙන් ... ඒ ගැන සිතා බලා ලබා දී ඇති තත්වය තුළ එය භාවිතා කිරීම නුසුදුසු ද නැද්ද යන්න සලකා බලන්න ... නීති රීති සාමාන්‍යයෙන් බිඳ දැමිය යුතු අතර, සිතුවිලි නොමැතිව රටා විලී නල්ලි භාවිතා නොකළ යුතුය.


17
හෙහ්, ඔබ මෙය සෑම තැනකම කරන්නේ නම්, එවිට ඔබට සෑම තැනකම සිංගල්ටන් වෙත යොමු කිරීමක් කළ යුතුව ඇත, එබැවින් ඔබට තවත් තනි පුද්ගලයෙක් නොමැත. :) (එය සාමාන්‍යයෙන් හොඳ දෙයක් IMO වේ.)
Bjarke Freund-Hansen

2
J බාර්ක් ෆ්‍රෙන්ඩ්-හැන්සන් - විකාර, ඔබ මොනවා ගැනද කතා කරන්නේ? සිංගල්ටන් යනු හුදෙක් එක් වරක් ස්ථාපනය කරන ලද පන්තියක නිදසුනකි. එවැනි සිංගල්ටන් ගැන සඳහන් කිරීමෙන් සත්‍ය වස්තුව පිටපත් නොවේ, එය එය යොමු කරයි - ඔබට තවමත් එකම වස්තුවක් ඇත (කියවන්න: සිංගල්ටන්).
එම්. මිම්පන්

2
@ M.Mimpen: නෑ, ප්රාග්ධන-S සිංගල්ටන් (මෙහිදී සාකච්ඡාවට බඳුන් දේ වන) (අ) බව පන්තියේ අවස්ථාව කියන්නේ සහතික එකම එක උදාහරණයක් මෙතෙක් පැවැත්මක් ඇත, සහ (ආ) පන්තිය ම හරහා ප්රවේශ වේ ගෝලීය ප්‍රවේශ ප්‍රවේශයක්. කිසිවක් කැඳවිය යුතු නැති බව ඔබ ප්‍රකාශ කර ඇත්නම් getInstance()(ආ) තවදුරටත් සත්‍ය නොවේ.
cHao

2
HcHao මම ඔබව අනුගමනය නොකරමි, නැතහොත් මා අදහස් දක්වන්නේ කාටදැයි ඔබට වැටහෙන්නේ නැත - එය ජෝජ් ෆ්‍රොයිඩ්-හැන්සන්ට ය. සිංගල්ටන් ගැන සඳහන් කිරීම් කිහිපයක් තිබීම නිසා තනි බොත්තම් කිහිපයක් ඇති බව බාර්ක් පවසයි. ගැඹුරු පිටපත් නොමැති බැවින් එය නිසැකවම සත්‍ය නොවේ.
එම්. මිම්පන්

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

69

සිංගල්ටන් රටාව තමා තුළම ගැටළුවක් නොවේ. ගැටළුව වන්නේ OO සංකල්ප පිළිබඳ තදබල ග්‍රහණයකින් තොරව වස්තු-නැඹුරු මෙවලම් සමඟ මෘදුකාංග සංවර්ධනය කරන පුද්ගලයින් විසින් රටාව බොහෝ විට භාවිතා කිරීමයි. මෙම සන්දර්භය තුළ සිංගල්ටන් හඳුන්වා දුන් විට ඒවා පාලනය කළ නොහැකි පංති දක්වා වර්ධනය වන අතර සෑම කුඩා භාවිතයක් සඳහාම උපකාරක ක්‍රම අඩංගු වේ.

පරීක්ෂණ දෘෂ්ටි කෝණයකින් සිංගල්ටන් ද ගැටළුවකි. ඔවුන් හුදකලා ඒකක පරීක්ෂණ ලිවීමට අපහසු කරයි. පාලනයේ ප්‍රතිලෝම (IoC) සහ පරායත්ත එන්නත් කිරීම යනු මෙම ගැටළුව වස්තු-නැඹුරු ආකාරයකින් ඒකක පරීක්ෂණයට යොමු කරවන රටාවකි .

එකතු කරන ලද කසළ පරිසරයක සිංගල්ටන් යනු මතක කළමනාකරණය සම්බන්ධයෙන් ඉක්මනින් ගැටළුවක් විය හැකිය.

සිංගල්ටන්ස් බාධකයක් මෙන්ම සමමුහුර්තකරණ ගැටලුවක් බවට පත්විය හැකි බහු-නූල් අවස්ථා ද තිබේ.


4
මම දන්නවා එය අවුරුදු ගණනාවක් පැරණි නූල් බව. hi @Kimoz u said: - මතක කළමනාකරණය සම්බන්ධයෙන් සිංගල්ටන් ඉක්මනින් ප්‍රශ්නයක් බවට පත්විය හැකිය. සිංගල්ටන් සහ කසළ එකතු කිරීම සම්බන්ධයෙන් කුමන ආකාරයේ ගැටලුවක් ඇතිවිය හැකිද යන්න වඩාත් විස්තරාත්මකව විස්තර කිරීමට කැමතියි.
තෝමස්

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

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

54

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


9
එය වස්තූන් (ඒකක), කාර්යයන් (ඒකක), සමස්ත පුස්තකාල (ඒකක) පරීක්ෂා කළ හැකි ඒකක පරීක්ෂණයේ ගැටලුවක් සේ පෙනේ, නමුත් පන්තියේ ස්ථිතික කිසිවක් (ඒකක) සමඟ අසමත් වේ.
v010dya

2
කෙසේ හෝ සියලු බාහිර යොමු කිරීම් සමච්චලයට ලක් කිරීමට ඔබ සිතන්නේ නැද්ද? ඔබ එසේ නම්, සිංගල්ටන් මොක් කිරීමට ඇති ගැටලුව කුමක්ද, එසේ නොවේ නම්, ඔබ ඇත්තටම ඒකක පරීක්ෂණ කරන්නේද?
ඩයිනියස්

Ain ඩේනියස්: සමච්චල් කිරීමේ සිද්ධීන් පන්ති සමච්චලයට වඩා අඩු කරදරයකි . ඔබට ඉතිරි යෙදුමෙන් පරීක්ෂණයට භාජනය වන පන්තිය උකහා ගත හැකි අතර ව්‍යාජ Singletonපන්තියක් සමඟ පරීක්‍ෂා කළ හැකිය . කෙසේ වෙතත්, එය පරීක්ෂණ ක්‍රියාවලිය බෙහෙවින් සංකීර්ණ කරයි. එකක් සඳහා, දැන් ඔබට අවශ්‍ය පරිදි පන්ති මුදා හැරීමට හැකි විය යුතුය (ඇත්ත වශයෙන්ම බොහෝ භාෂාවල විකල්පයක් නොවේ), හෝ එක් එක් පරීක්ෂණය සඳහා නව වීඑම් එකක් ආරම්භ කරන්න (කියවන්න: පරීක්ෂණ සඳහා දහස් වාරයක් ගතවනු ඇත). දෙදෙනෙකු සඳහා, යැපීම Singletonක්‍රියාත්මක කිරීමේ විස්තරයක් වන අතර එය දැන් ඔබගේ පරීක්ෂණ පුරා කාන්දු වෙමින් පවතී.
cHao

Powermock හට ස්ථිතික දේවල් සමච්චල් කළ හැකිය.
ස්නිකොලාස්

වස්තුවකට සරදම් කිරීම යනු සැබෑ වස්තුවක් නිර්මාණය කිරීමද? සමච්චල් කිරීම සැබෑ වස්තුවක් නිර්මාණය නොකරන්නේ නම් පංතිය සිංගල්ටන් ද නැතිනම් ක්‍රමය ස්ථිතික ද යන්න වැදගත් වන්නේ ඇයි?
අරුන් රාජ්

45

පොකුරු කිරීමේදී සිංගල්ටෝන ද නරක ය . මන්ද යත්, එවිට ඔබේ යෙදුමේ “හරියටම එක සිංගල්ටන්” එකක් නොමැති බැවිනි.

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

public class SingletonDao {
    // songleton's static variable and getInstance() method etc. omitted
    public void writeXYZ(...){
        synchronized(...){
            // some database writing operations...
        }
    }
}

එබැවින් ඔබගේ යෙදුමේ ඇත්තේ එක් සිංගල්ටන් එකක් පමණක් බවත් සියලු දත්ත සමුදායන් මෙම එක හරහා පමණක් ගමන් කරන බවත් ඔබට විශ්වාසයි SingletonDao. ඔබේ නිෂ්පාදන පරිසරය දැන් මේ ආකාරයට පෙනේ: තනි තනි

මේ වන විට සියල්ල හොඳයි.

දැන්, ඔබේ වෙබ් යෙදුමේ අවස්ථා කිහිපයක් පොකුරක් තුළ සැකසීමට ඔබට අවශ්‍ය යැයි සලකන්න. දැන්, ඔබට හදිසියේම මෙවැනි දෙයක් තිබේ:

බොහෝ සිංගල්ටන්

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

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


4
සිංගල්ටන් ක්‍රියාත්මක කරන්නේ කෙසේදැයි ඔබ නොදන්නේ නම්, ඔබ එය නොකළ යුතුය. ඔබ කරන්නේ කුමක්දැයි ඔබ නොදන්නේ නම්, ඔබ එය පළමුව සොයා ගත යුතු අතර ඉන් පසුව පමණක් ඔබට අවශ්‍ය දේ කරන්න.
ඩයිනියස්

3
මෙය සිත්ගන්නා සුළුය, මට ප්‍රශ්නයක් තිබේ. තනි යන්ත්‍ර - වෙනස් යන්ත්‍රයක / ජේවීඑම් - තනි දත්ත ගබඩාවකට සම්බන්ධ වන්නේ නම් ගැටලුව කුමක්ද? සිංගල්ටන් විෂය පථය එම විශේෂිත ජේවීඑම් සඳහා පමණක් වන අතර එය පොකුරක් තුළ පවා සත්‍ය වේ. අපගේ අභිප්‍රාය යෙදුම හරහා ඇති එකම වස්තුවක් බැවින් මෙම විශේෂිත තත්වය නරක යැයි දාර්ශනිකව පවසනවා වෙනුවට මෙම විධිවිධානය නිසා ඇතිවිය හැකි තාක්ෂණික ගැටළු දැකීමට මම සතුටු වෙමි.
සෞරබ් පටිල්

39
  1. එය පහසුවෙන් (ab) ගෝලීය විචල්‍යයක් ලෙස භාවිතා කරයි.
  2. සිංගල්ටන් මත යැපෙන පන්ති හුදකලා වීමේ ඒකක පරීක්ෂණයට සාපේක්ෂව දුෂ්කර ය.

33

ඒකාධිකාරය යනු යක්ෂයා වන අතර කියවිය නොහැකි / විකෘති තත්වයක් ඇති සිංගල්ටන් යනු 'සැබෑ' ගැටළුවයි ...

ජේසන්ගේ පිළිතුරේ යෝජනා කර ඇති පරිදි සිංගල්ටන් යනු ව්‍යාධි බොරුකාරයන් බව කියවීමෙන් පසු මට සිංගල්ටන් බොහෝ විට අනිසි ලෙස භාවිතා වන ආකාරය පිළිබඳ හොඳම උදාහරණය සපයයි .

ගෝලීය නරක නිසා:

  • ඒ. එය නාම අවකාශ ගැටුමක් ඇති කරයි
  • බී. එය අනවශ්‍ය ආකාරයකින් රාජ්‍යය නිරාවරණය කරයි

එය සිංගල්ටන් වෙත පැමිණෙන විට

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

අවසාන ප්‍රකාශයේ ඔහු බ්ලොග් අඩවියේ 'සිංගල්ටන් බොරුකාරයෝ' යන සංකල්පය ගැන සඳහන් කරයි.

ඒකාධිකාරයට මෙය අදාළ වන්නේ කෙසේද?

ඒකාධිකාරී ක්‍රීඩාවක් ආරම්භ කිරීමට, පළමුව:

  • අපි මුලින්ම නීති රීති ස්ථාපිත කරන බැවින් සෑම දෙනාම එකම පිටුවක සිටිමු
  • ක්‍රීඩාවේ ආරම්භයේදීම සෑම කෙනෙකුටම සමාන ආරම්භයක් ලබා දෙනු ලැබේ
  • ව්යාකූලත්වය වළක්වා ගැනීම සඳහා ඉදිරිපත් කරනු ලබන්නේ එක් නීති මාලාවක් පමණි
  • ක්‍රීඩාව පුරාම නීති වෙනස් කිරීමට අවසර නැත

දැන්, ඇත්ත වශයෙන්ම ඒකාධිකාරය ඉටු නොකළ ඕනෑම කෙනෙකුට , මෙම ප්‍රමිතීන් වඩාත් සුදුසු ය. ඒකාධිකාරයේ පරාජයක් ගිල ගැනීමට අපහසුය, මන්ද, ඒකාධිකාරය මුදල් පිළිබඳ ය, ඔබට අහිමි වුවහොත් සෙසු ක්‍රීඩකයන් ක්‍රීඩාව අවසන් කරන ආකාරය දැඩි ලෙස නැරඹිය යුතු අතර පාඩු සාමාන්‍යයෙන් වේගවත් හා තලා දමනු ඇත. ඉතින්, නීති රීති සාමාන්‍යයෙන් යම් අවස්ථාවක දී සමහර ක්‍රීඩකයන්ගේ ආත්මාර්ථය වෙනුවෙන් අනෙක් අයගේ වියදමින් විකෘති වේ.

ඉතින් ඔබ බොබ්, ජෝ සහ එඩ් මිතුරන් සමඟ ඒකාධිකාරය වාදනය කරයි. ඔබ වේගයෙන් ඔබේ අධිරාජ්‍යය ගොඩනඟමින් වෙළඳපල කොටස on ාතීය අනුපාතයකට පරිභෝජනය කරයි. ඔබේ විරුද්ධවාදීන් දුර්වල වන අතර ඔබ රුධිරය ගඳ ගසන්නට පටන් ගනී (සංකේතාත්මකව). ඔබේ මිතුරා බොබ් සිය මුදල් සියල්ලම හැකි තරම් අඩු වටිනාකමින් යුත් ග්‍රිඩ්ලොක් කිරීම සඳහා යොදවා ඇති නමුත් ඔහු අපේක්ෂා කළ ආකාරයට ආයෝජනයෙන් ඉහළ ප්‍රතිලාභයක් නොලැබේ. බොබ්, අවාසනාවන්ත ලෙස ඔබේ බෝඩ්වෝක් වෙත ගොඩබසින අතර ක්‍රීඩාවෙන් බැහැර වේ.

දැන් ක්රීඩාව මිත්රශීලී ඩයිස් රෝල් කිරීමේ සිට බරපතල ව්යාපාර දක්වා ගමන් කරයි. බොබ් අසාර්ථකත්වයේ ආදර්ශය බවට පත් කර ඇති අතර ජෝ සහ එඩ් 'ඒ මිනිහා' මෙන් අවසන් වීමට කැමති නැත. ඉතින්, ඔබ ප්‍රමුඛ ක්‍රීඩකයා වීම හදිසියේම සතුරා බවට පත්වේ. ජෝ සහ එඩ් මේසයට යටින් වෙළඳාම් කිරීම, පිටුපස මුදල් එන්නත් කිරීම, අවතක්සේරු නොකළ නිවාස හුවමාරුව සහ සාමාන්‍යයෙන් ක්‍රීඩකයෙකු ලෙස ඔබව දුර්වල කිරීමට ඕනෑම දෙයක් කිරීමට පටන් ගනී.

ඉන්පසුව, ඔවුන්ගෙන් එක් අයෙකු ජයග්‍රහණය කරනවා වෙනුවට, ක්‍රියාවලිය සියල්ල ආරම්භ වේ. හදිසියේම, සීමිත නීති මාලාවක් චලනය වන ඉලක්කයක් බවට පත්වන අතර ක්‍රීඩාව දිවි ගලවා ගත් දා සිට සෑම ඉහළ මට්ටමේ රියැලිටි රූපවාහිනී වැඩසටහනක පදනම සැකසෙන සමාජ අන්තර්ක්‍රියා වලට පිරිහී යයි. ඇයි, නීති වෙනස් වෙමින් පවතින නිසා සහ ඔවුන් නියෝජනය කළ යුත්තේ කෙසේද / ඇයි / කුමක් ද යන්න පිළිබඳ සම්මුතියක් නොමැති අතර, වඩා වැදගත් ලෙස, තීරණ ගන්නා කිසිවෙකු නොමැත. ක්රීඩාවේ සෑම ක්රීඩකයෙකුම, එම අවස්ථාවේදී, ඔහුගේ / ඇයගේම නීති රීති සකස් කරමින් සිටින අතර ක්රීඩකයන් දෙදෙනෙකු වෙහෙසට පත්වී සෙමෙන් අත්හරින තෙක් අවුල් සහගත තත්වයක් ඇති වේ.

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

වැඩසටහන්කරණයට මෙය අදාළ වන්නේ කෙසේද?

විකෘති සිංගල්ටන් ඉදිරිපත් කරන පැහැදිලි නූල්-ආරක්ෂාව සහ සමමුහුර්ත කිරීමේ ගැටළු සියල්ල පසෙක තබා ... ඔබට එක් දත්ත කට්ටලයක් තිබේ නම්, එය විවිධ ප්‍රභවයන් සමගාමීව කියවීමට / හැසිරවීමට හැකියාව ඇති අතර යෙදුම් ක්‍රියාත්මක කිරීමේ ජීවිත කාලය තුළ පවතී, පසුපසට ගොස් "මම මෙහි නිවැරදි ආකාරයේ දත්ත ව්‍යුහයක් භාවිතා කරන්නේදැයි" විමසීමට හොඳ කාලයක් විය හැකිය.

පුද්ගලිකව, ක්‍රමලේඛකයෙකු යෙදුමක් තුළ කිසියම් විකෘති හරස් නූල් දත්ත ගබඩාවක් ලෙස භාවිතා කරමින් තනි පුද්ගලයකු අපයෝජනය කිරීම මම දැක ඇත්තෙමි. කේතය මත කෙලින්ම වැඩ කර ඇති නිසා, එය මන්දගාමී බව මට සහතික කළ හැකිය (එය නූල් ආරක්ෂිත කිරීමට අවශ්‍ය සියලුම නූල් අගුල් නිසා) සහ වැඩ කිරීමට බියකරු සිහිනයක් (සමමුහුර්ත දෝෂවල අනපේක්ෂිත / අතරමැදි ස්වභාවය නිසා), සහ 'නිෂ්පාදන' තත්වයන් යටතේ පරීක්ෂා කිරීම පාහේ කළ නොහැක්කකි. සමහර කාර්ය සාධන ගැටළු මඟහරවා ගැනීම සඳහා ඡන්ද විමසීම් / සං aling ා භාවිතයෙන් පද්ධතියක් සංවර්ධනය කළ හැකි නමුත් එය පරීක්‍ෂා කිරීමේදී ඇති වන ගැටලු විසඳන්නේ නැති අතර, 'සැබෑ' දත්ත ගබඩාවකට දැනටමත් එකම ක්‍රියාකාරිත්වය වඩා ශක්තිමත් ලෙස ඉටු කළ හැකි විට කරදර වන්නේ ඇයි? / පරිමාණය කළ හැකි ආකාරයෙන්.

සිංගල්ටන් යනු විකල්පයක් පමණි . වස්තුවක ලිවීමට-කියවීමට පමණි. එම රීතියම වස්තුවේ ගුණාංග / සාමාජිකයින්ටද ඇතුළත් විය යුතුය.


1
සිංගල්ටන් විසින් යම් දත්ත ප්‍රමාණයක් ලබා ගන්නේ නම් කුමක් කළ යුතුද?
යෝලා

@ යෝලා සිංගල්ටන් කලින් තීරණය කළ සහ / හෝ ස්ථාවර කාලසටහනකට අනුව යාවත්කාලීන කිරීමට සැලසුම් කර ඇත්නම් එය ලිවීම් ගණන අඩු කරනු ඇත. එහෙත්, එකම භාවිතය අනුකරණය කරන සිංගල්ටන් නොවන නිදසුනක් සමච්චලයට ලක් නොකරන්නේ නම්, ඔබට සිංගල්ටන් සමඟ අන්තර්ක්‍රියා කරන කිසිදු කේතයක් නිවැරදිව පරීක්ෂා කිරීමට නොහැකි වනු ඇත. ටීඩීඩී ජනයාට සුදුසුකමක් ඇති නමුත් එය ක්‍රියාත්මක වනු ඇත.
ඉවාන් ප්ලේස්

An ඉවාන් ප්ලේස්: සමච්චල් කිරීමකින් වුවද, ඔබට පවසන කේත සමඟ යම් ගැටළු ඇති Singleton.getInstance()වේ. එක් සත්‍ය සිදුවීමක් ගබඩා කර ඇති ක්ෂේත්‍රය සැකසීමෙන් පරාවර්තනයට සහාය වන භාෂාවකට ඒ වටා වැඩ කළ හැකිය. IMO, කෙසේ වෙතත්, ඔබ වෙනත් පන්තියක පෞද්ගලික රාජ්‍යයක් සමඟ වඳුරන් කිරීමට ගිය පසු පරීක්ෂණ ටිකක් විශ්වාසදායක වේ.
cHao

29

සිංගල්ටන් යනු තනි අවස්ථාවක් ගැන නොවේ!

වෙනත් පිළිතුරු මෙන් නොව මට සිංගල්ටන්වල ​​ඇති වැරැද්ද ගැන කතා කිරීමට අවශ්‍ය නැත, නමුත් නිවැරදිව භාවිතා කරන විට ඒවා කෙතරම් බලවත් හා නියමද යන්න ඔබට පෙන්වීමට!

  • ගැටළුව : බහු-නූල් පරිසරය තුළ සිංගල්ටන් අභියෝගයක් විය හැකිය
    විසඳුම : ඔබේ සිංගල්ටන්හි සියලු පරායත්තතාවයන් ආරම්භ කිරීම සඳහා තනි නූල් සහිත බූට්ස්ට්‍රැප් ක්‍රියාවලියක් භාවිතා කරන්න.
  • ගැටලුව : සිංගල්ටන් වලට සරදම් කිරීම අපහසුය.
    විසඳුම : සමච්චල් කිරීම සඳහා කර්මාන්තශාලා රටාව භාවිතා කරන්න

ඔබ සිතියම් හැකි MyModelකිරීමට TestMyModelඅනුන එය, සෑම තැනකම, විට පන්ති MyModelඔබට ලැබෙනු ඇත ඖෂධයක් එන්නත් කළ ඇත TestMyModelinstread. - ගැටලුව : සිංගල්ටෝන කිසි විටෙකත් බැහැර නොකරන බැවින් මතක කාන්දු විය හැක.
විසඳුම : හොඳයි, ඒවා බැහැර කරන්න! තනි බොත්තමක් නිසියාකාරව බැහැර කිරීම සඳහා ඔබගේ යෙදුමේ ඇමතුමක් ලබා දෙන්න, ඔබ ඒවාට සම්බන්ධ කර ඇති ඕනෑම දත්තයක් ඉවත් කර අවසානයේ ඒවා කර්මාන්ත ශාලාවෙන් ඉවත් කරන්න.

මා සඳහන් කළ පරිදි සිංගල්ටන් යනු තනි අවස්ථාවක් ගැන නොවේ.

  • සිංගල්ටෝන කියවීමේ හැකියාව වැඩි දියුණු කරයි : ඔබට ඔබේ පන්තිය දෙස බලා එය යැපෙන තනි ඒකකය කුමක්දැයි බැලීමට හැකිය.
  • සිංගල්ටන් නඩත්තු කිරීම වැඩි දියුණු කරයි : ඔබ සිංගල්ටන් එන්නතක් මකා දැමූ පන්තියකින් යැපීමක් ඉවත් කළ පසු, ඔබේ යැපීම වටා ගෙන ගිය වෙනත් පංතිවල විශාල සබැඳියක් ගොස් සංස්කරණය කිරීමට ඔබට අවශ්‍ය නැත (මෙය මට සුවඳ කේතයකි @ ජිම් බර්ගර් )
  • සිංගල්ටන්ස් මතකය සහ ක්‍රියාකාරිත්වය වැඩි දියුණු කරයි : ඔබගේ යෙදුමේ යම් දෙයක් සිදු වූ විට, එය ලබා දීමට දිගු ඇමතුම් දාමයක් අවශ්‍ය වූ විට, ඔබ මතකය සහ ක්‍රියාකාරිත්වය නාස්ති කරයි, සිංගල්ටන් භාවිතා කිරීමෙන් ඔබ මධ්‍යම මිනිසා කපා දමයි, සහ ඔබේ ක්‍රියාකාරිත්වය සහ මතක භාවිතය වැඩි දියුණු කරන්න ( අනවශ්‍ය දේශීය විචල්‍යයන් වෙන් කිරීමෙන් වැළකී).

2
මෙය ඔබේ ව්‍යාපෘතියේ පන්ති දහස් ගණනකින් ගෝලීය රාජ්‍යයට ප්‍රවේශ වීමට ඉඩ සලසන සිංගල්ටන් සමඟ ඇති මගේ ප්‍රධාන ගැටළුව විසඳන්නේ නැත.
ලෙජන්ඩ් දිග

8
අරමුණ එයයි ...
ඉල්යා ගස්මන්

පුරාවෘත්ත දිග එය වැරදි ඇයි? උදාහරණයක් ලෙස, මගේ යෙදුමේ Settingsඕනෑම විජට් එකකින් ප්‍රවේශ විය හැකි සිංගල්ටන් වස්තුවක් මා සතුව ඇති අතර එමඟින් සෑම විජට් එකක්ම පෙන්වන අංක සංයුති කරන්නේ කෙසේදැයි දැන ගනී. එය ගෝලීයව ප්‍රවේශ විය හැකි වස්තුවක් නොවේ නම්, මට එය ඉදිකිරීම්කරු තුළ ඇති සෑම විජට් එකකටම ඉදිකිරීම්කරු තුළට එන්නත් කර සාමාජික විචල්‍යයක් ලෙස සඳහන් කළ යුතුය. මෙය මතකය හා කාලය නාස්ති කිරීමකි.
වීකේ

23

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

මා දකින ලොකුම ඉස්කුරුප්පු දෙක නම්: එය ගෝලීය ලෙස සැලකීම සහ සිංගල්ටන් වසා දැමීම නිර්වචනය කිරීමට අපොහොසත් වීමයි.

සෑම කෙනෙකුම සිංගල්ටන් ගැන කතා කරන්නේ ගෝලීයයන් ලෙස ය. කෙසේ වෙතත්, ගෝලීය (බොහෝ විට) සියල්ලම අයහපත් බව පැමිණෙන්නේ ගෝලීය වීම නොව, ඔබ එය භාවිතා කරන ආකාරයෙනි. සිංගල්ටන් සඳහාද එසේමය. “තනි අවස්ථාවක්” ලෙස සැබවින්ම “ගෝලීයව ප්‍රවේශ විය හැකි” යන්න අදහස් කිරීම අවශ්‍ය නොවේ. එය වඩාත් ස්වාභාවික අතුරු duct ලයක් වන අතර, අප දන්නා සියලු අයහපත් දේ එයින් ලැබෙන්නේ නම්, ගෝලීය ප්‍රවේශ්‍යතාව උපයෝගී කර ගැනීමට අප එතරම් ඉක්මන් නොවිය යුතුය. ක්‍රමලේඛකයින් සිංගල්ටන් එකක් දුටු පසු ඔවුන් සෑම විටම එහි නිදර්ශන ක්‍රමය හරහා කෙලින්ම එයට ප්‍රවේශ වන බව පෙනේ. ඒ වෙනුවට, ඔබ වෙනත් ඕනෑම වස්තුවකට සමානව එයට යා යුතුය. බොහෝ කේතයන් එය සිංගල්ටන් සමඟ කටයුතු කරන බව නොදැන සිටිය යුතුය (ලිහිල් සම්බන්ධ කිරීම, හරිද?). ගෝලීය වැනි කුඩා කේතයක් පමණක් වස්තුවට ප්‍රවේශ වන්නේ නම්, විශාල හානියක් අහෝසි වේ.

සිංගල්ටන් සන්දර්භය ද සැබවින්ම වැදගත් ය. සිංගල්ටන් හි නිර්වචන ලක්ෂණය වන්නේ “ඇත්තේ එකක්” යන්නයි, නමුත් සත්‍යය නම් එය යම් ආකාරයක සන්දර්භයක් / නාම අවකාශයක් තුළ “එකක් පමණි” යන්නයි. ඒවා සාමාන්‍යයෙන් එකක්: නූල් එකකට එකක්, ක්‍රියාවලියක්, අයිපී ලිපිනයක් හෝ පොකුරක්, නමුත් ප්‍රොසෙසරයකට එකක්, යන්ත්‍රයක්, භාෂා නාම අවකාශයක් / පන්ති පැටවුමක් / ඕනෑම දෙයක්, සබ්නෙට්, අන්තර්ජාලය යනාදිය.

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

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

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


23

විකිපීඩියා Singleton_pattern බලන්න

සමහර අය එය ඕනෑවට වඩා භාවිතා කරන බව සිතන, පංතියක එකම අවස්ථාවක් ඇත්ත වශයෙන්ම අවශ්‍ය නොවන අවස්ථාවන්හිදී අනවශ්‍ය සීමාවන් හඳුන්වා දෙමින් එය ප්‍රති-රටාවක් ලෙස සලකනු ලැබේ. [1] [2] [3] [4]

යොමුව (ලිපියෙන් අදාළ යොමු කිරීම් පමණි)

  1. ^ ඇලෙක්ස් මිලර්. මම වෛර කරන රටා # 1: සිංගල්ටන් , ජූලි 2007
  2. ^ ස්කොට් ඩෙන්ස්මෝර්. සිංගල්ටන් නපුරු වන්නේ ඇයි , 2004 මැයි
  3. ^ ස්ටීව් යෙග්. මෝඩයන් ලෙස සැලකෙන සිංගල්ටන් , 2004 සැප්තැම්බර්
  4. ^ ජේ. බී. රේන්ස්බර්ගර්, අයි.බී.එම්. ඔබේ සිංගල්ටන් බුද්ධිමත්ව භාවිතා කරන්න , 2001 ජූලි

8
රටාව පිළිබඳ විස්තරයක් එය නපුරක් ලෙස සලකන්නේ මන්දැයි පැහැදිලි නොකරයි ...
Jrgns

2
කිසිසේත්ම සාධාරණ නැත: "සමහර අය එය ඕනෑවට වඩා භාවිතා කරන බව සිතන, පංතියක එකම අවස්ථාවක් සැබවින්ම අවශ්‍ය නොවන අවස්ථාවන්හිදී අනවශ්‍ය සීමාවන් හඳුන්වා දෙමින් එය ප්‍රති-රටාවක් ලෙස සලකනු ලැබේ." යොමුව දෙස බලන්න ... කෙසේ හෝ මට RTFM තිබේ.
GUI Junkie

17

සිංගල්ටන් යනු නරක බව නොවේ, නමුත් ගොෆ් සැලසුම් රටාවයි. වලංගු වන එකම තර්කය නම්, පරීක්‍ෂණය සම්බන්ධයෙන් GoF සැලසුම් රටාව ණය නොදෙන බවය, විශේෂයෙන් පරීක්ෂණ සමාන්තරව ක්‍රියාත්මක වන්නේ නම්.

ඔබ කේතයේ පහත දැක්වෙන මාධ්‍යයන් යොදන තාක් කල් පන්තියක එක් අවස්ථාවක් භාවිතා කිරීම වලංගු ඉදිකිරීමකි:

  1. සිංගල්ටන් ලෙස භාවිතා කරන පන්තිය අතුරු මුහුණතක් ක්‍රියාත්මක කරන බවට වග බලා ගන්න. එකම අතුරුමුහුණතක් භාවිතා කරමින් මුරණ්ඩු හෝ විහිළු ක්‍රියාත්මක කිරීමට මෙය ඉඩ දෙයි

  2. සිංගල්ටන් නූල් ආරක්ෂිත බවට වග බලා ගන්න. එය ලබා දී ඇත.

  3. සිංගල්ටන් ස්වභාවය සරල විය යුතු අතර ඕනෑවට වඩා සංකීර්ණ නොවිය යුතුය.

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

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

සමාන්තර පරීක්ෂණ ධාවන ප්‍රවාහයන්හි නිර්ණායක හැසිරීම සහතික කළ හැකි සාර්ථකත්වයකින් යුත් අපගේ විසඳුම් සඳහා අපි සිංගල්ටන් භාවිතා කර ඇත්තෙමු.


+1, අවසාන වශයෙන් සිංගල්ටන් එකක් වලංගු විය හැකි විට ආමන්ත්‍රණය කරන පිළිතුරකි .
පැසීරියර්

16

පිළිගත් පිළිතුරේ කරුණු 4 ආමන්ත්‍රණය කිරීමට මා කැමතිය, මා වැරදි වන්නේ මන්දැයි යමෙකුට පැහැදිලි කළ හැකිය.

  1. ඔබගේ කේතයේ පරායත්තතා සැඟවීම නරක ඇයි? දැනටමත් සැඟවුණු පරායත්තතා දුසිම් ගණනක් ඇත (සී ධාවන කාල ඇමතුම්, ඕඑස් ඒපීඅයි ඇමතුම්, ගෝලීය ක්‍රියාකාරී ඇමතුම්), සහ සිංගල්ටන් පරායත්තතා සොයා ගැනීම පහසුය (උදාහරණ සඳහා සොයන්න ()).

    "එය පසුකර යාම වළක්වා ගැනීම සඳහා ගෝලීය දෙයක් සෑදීම කේත සුවඳකි." සිංගල්ටන් කේත සුවඳක් වීම වළක්වා ගැනීම සඳහා යමක් පසුකර නොයන්නේ ඇයි?

    ඔබ තනි වස්තුවක් වළක්වා ගැනීම සඳහා ඇමතුම් තොගයක් තුළ කාර්යයන් 10 ක් හරහා වස්තුවක් පසු කරන්නේ නම්, එය එතරම් විශාලද?

  2. තනි වගකීම් මූලධර්මය: මම හිතන්නේ මෙය ටිකක් අපැහැදිලි වන අතර එය ඔබගේ වගකීම පිළිබඳ අර්ථ දැක්වීම මත රඳා පවතී. අදාළ ප්‍රශ්නයක් වනුයේ, මෙම නිශ්චිත “වගකීම” පන්ති කාරණයකට එකතු කරන්නේ ඇයි ?

  3. පංතියක් තුළට වස්තුවක් යැවීම පන්තිය තුළ සිට තනි වස්තුවක් ලෙස එම වස්තුව භාවිතා කරනවාට වඩා තදින් බැඳීමට හේතුව කුමක්ද?

  4. රාජ්යය කොපමණ කාලයක් පවතින්නේද යන්න වෙනස් වන්නේ ඇයි? තනි තනිව නිර්මාණය කළ හැකිය, නැතහොත් අතින් විනාශ කළ හැකිය, එබැවින් පාලනය තවමත් පවතී, සහ ඔබට තනි ජීවිතයක් නොවන තනි වස්තුවක ආයු කාලය සමාන කළ හැකිය.

ඒකක පරීක්ෂණ සම්බන්ධයෙන්:

  • සෑම පන්තියක්ම ඒකක පරීක්ෂාවට ලක් කිරීම අවශ්‍ය නොවේ
  • ඒකකය පරීක්‍ෂා කළ යුතු සියලුම පංතිවලට සිංගල්ටන් ක්‍රියාවට නැංවීම අවශ්‍ය නොවේ
  • ඔවුන් නම්, ඇයි ඒකකය පරීක්ෂා කිරීම අවශ්ය කර, එම ක්රියාත්මක කිරීම වෙනස් කිරීමට අවශ්ය වන්නේ ඇයි, එය තනි භාවිතා පරායත්ත එන්නත් හරහා එය සම්මත කරන ලද කටය ඇති වීම සඳහා පන්ති වෙනස් කිරීමට පහසු වේ.

1
1. ඒ සියලු සැඟවුණු පරායත්තතා? ඒවා ද නරක ය. සැඟවුණු පරායත්තතා සැමවිටම නපුරු ය. නමුත් සීආර්ටී සහ මෙහෙයුම් පද්ධතිය සම්බන්ධයෙන් ගත් කල, ඔවුන් දැනටමත් එහි සිටින අතර යමක් කිරීමට ඇති එකම ක්‍රමය ඔවුන්ය. (ධාවන කාලය හෝ මෙහෙයුම් පද්ධතිය භාවිතා නොකර සී වැඩසටහනක් ලිවීමට උත්සාහ කරන්න.) දේවල් කිරීමට ඇති හැකියාව ඔවුන්ගේ නිෂේධාත්මක බව ඉක්මවා යයි. අපගේ කේතයේ ඇති තනි පුද්ගලයන්ට එම සුඛෝපභෝගී බව නොලැබේ; ඒවා අපගේ පාලන හා වගකීම් ක්ෂේත්‍රය තුළ ස්ථිරව පවතින බැවින්, සෑම භාවිතයක්ම (කියවන්න: සෑම අතිරේක සැඟවුණු යැපීමක්) දේවල් සිදු කිරීමට ඇති එකම සාධාරණ ක්‍රමය ලෙස යුක්ති සහගත විය යුතුය. ඉතා, ඉතා ඔවුන් කිහිපයක් ඇත්තටම වේ.
cHao

2. "වගකීම" යන්න සාමාන්‍යයෙන් අර්ථ දැක්වෙන්නේ "වෙනස් වීමට හේතුව" ලෙසිනි. සිංගල්ටන් එකක් සිය ජීවිත කාලය කළමනාකරණය කිරීම සහ එහි සැබෑ කාර්යය ඉටු කිරීම යන දෙකම අවසන් කරයි. ඔබ කාර්යය කරන ආකාරය හෝ වස්තු ප්‍රස්ථාරය සාදන ආකාරය වෙනස් කරන්නේ නම් , ඔබ පන්තිය වෙනස් කළ යුතුය. නමුත් ඔබට වෙනත් කේතයක් තිබේ නම් වස්තු ප්‍රස්ථාරය ගොඩනඟා ඔබේ පන්තිය එහි සැබෑ කාර්යය ඉටු කරයි නම්, එම ආරම්භක කේතයට වස්තුව ප්‍රස්ථාරය කැමති ආකාරයට සැකසිය හැකිය. සෑම දෙයක්ම වඩා මොඩියුලර් සහ පරීක්‍ෂා කළ හැකි ය, මන්ද ඔබට ටෙස්ට් ඩබල් ඇතුළු කර සියල්ල කැමැත්තෙන් ඉරා දැමිය හැකි අතර ඔබ තවදුරටත් සැඟවුණු චලනය වන කොටස් මත විශ්වාසය තබන්නේ නැත.
cHao

1
HCHao: 1. “දේවල් කිරීමට ඇති හැකියාව ඔවුන්ගේ නිෂේධනයන්ට වඩා බෙහෙවින් වැඩි” බව ඔබ හඳුනා ගැනීම සතුටක්. උදාහරණයක් ලෙස ල ging ු-සටහන් රාමුවක් වනු ඇත. සංවර්ධකයින් ලොග් වීම අධෛර්යමත් කර ඇති බවක් අදහස් කරන්නේ නම්, ක්‍රියාකාරී ඇමතුම් ස්ථර හරහා යැපුම් එන්නත් කිරීම මගින් ගෝලීය ල ging ු-සටහන් වස්තුවක් යැවීම අනිවාර්යය. එබැවින් සිංගල්ටන්. 3. ඔබේ තද සම්බන්ධක ලක්ෂ්‍යය අදාළ වන්නේ පංතියේ ගනුදෙනුකරුවන්ට බහුමාපකය හරහා හැසිරීම පාලනය කිරීමට අවශ්‍ය නම් පමණි. එය බොහෝ විට එසේ නොවේ.
ජෝන්

2
4. “අතින් විනාශ කළ නොහැක” යන්න තාර්කික ඇඟවීමක් වන අතර එය “එක් අවස්ථාවක් පමණක් විය හැකිය”. ඔබ සිංගල්ටන් අර්ථ දක්වන්නේ එලෙස නම්, අපි එකම දේ ගැන කතා නොකරමු. සියලුම පන්ති ඒකක පරීක්ෂාවට ලක් නොකළ යුතුය. එය ව්‍යාපාරික තීරණයක් වන අතර සමහර විට වෙලඳපොලෙන් වෙලඳපොල හෝ සංවර්ධන පිරිවැය ප්‍රමුඛ වේ.
ජෝන්

1
3. ඔබට බහුමාපකය අවශ්‍ය නැතිනම් ඔබට උදාහරණයක් අවශ්‍ය නොවේ. ඔබ එය ස්ථිතික පංතියක් බවට පත් කළ හැකි අතර, ඔබ කෙසේ හෝ තනි වස්තුවකට හා තනි ක්‍රියාවට නැංවීමට හේතු විය හැක - අවම වශයෙන් ඒපීඅයි ඔබට එතරම් බොරු නොකියයි.
cHao

15

වින්ස් හස්ටන්ට මෙම නිර්ණායක ඇත, එය මට සාධාරණ යැයි පෙනේ:

සිංගල්ටන් සලකා බැලිය යුත්තේ පහත සඳහන් නිර්ණායක තුනම සෑහීමකට පත්වේ නම් පමණි:

  • තනි අවස්ථාවෙහි හිමිකාරිත්වය සාධාරණ ලෙස පැවරිය නොහැක
  • කම්මැලි ආරම්භය යෝග්‍ය වේ
  • ගෝලීය ප්‍රවේශය වෙනත් ආකාරයකින් සපයා නැත

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


14

පිරිසිදු දෘෂ්ටි කෝණයකින් සිංගල්ටන් නරක ය.

ප්‍රායෝගික දෘෂ්ටි කෝණයකින් බලන කල, සිංගල්ටන් යනු සංකීර්ණත්වයට එදිරිව වෙළඳාමෙන් බැහැර වන කාලයකි .

ඔබගේ යෙදුම එතරම් වෙනස් නොවන බව ඔබ දන්නේ නම් ඒවා සමඟ යෑමට හොඳ ය. ඔබගේ අවශ්‍යතා අනපේක්ෂිත ආකාරයකින් වෙනස් වුවහොත් ඔබට නැවත ප්‍රතිනිර්මාණය කිරීමට අවශ්‍ය විය හැකි බව දැන ගන්න (බොහෝ අවස්ථාවන්හි එය හරි ය).

සිංගල්ටෝන සමහර විට ඒකක පරීක්ෂාවද සංකීර්ණ කරයි.


3
මගේ අත්දැකීම නම්, සිංගල්ටන් වලින් ආරම්භ කිරීම දිගු කාලීනව ගණන් නොගෙන කෙටි කාලීනව පවා ඔබට රිදවන බවයි. යෙදුම දැනටමත් යම් කාලයක් තිස්සේ පැවතුනහොත් සහ වෙනත් තනි බොත්තම් වලින් දැනටමත් ආසාදනය වී ඇත්නම් මෙම බලපෑම මට අඩු විය හැකිය. මුල සිටම ආරම්භ වේද? ඕනෑම වියදමකින් ඒවා වළක්වා ගන්න! වස්තුවක තනි අවස්ථාවක් අවශ්‍යද? මෙම වස්තුව ක්ෂණිකව කළමනාකරණය කිරීමට කර්මාන්ත ශාලාවකට ඉඩ දෙන්න.
ස්වේන්

1
AFAIK Singleton යනු කර්මාන්තශාලා ක්‍රමයකි. මේ නිසා මට ඔබේ නිර්දේශය ලැබෙන්නේ නැහැ.
ටකෝන්

3
"කර්මාන්ත ශාලාවක්"! = "එකම පන්තියේ අනෙක් ප්‍රයෝජනවත් දේවලින් වෙන් කළ නොහැකි කර්මාන්තශාලා ක්‍රමයක්"
ස්වේන්

13

රටාවේ සහජයෙන්ම වැරැද්දක් නැත, එය ඔබගේ ආකෘතියේ යම් අංගයක් සඳහා සැබවින්ම තනි වන බව උපකල්පනය කරයි.

පසුබෑමට හේතු වී ඇත්තේ එහි අධික ලෙස භාවිතා කිරීම නිසා එය තේරුම් ගැනීමට සහ ක්‍රියාත්මක කිරීමට පහසුම රටාව වීමයි.


6
විධිමත් ඒකක පරීක්ෂණවල යෙදෙන පුද්ගලයින් සමඟ කටයුතු කිරීමට ඔවුන් බියකරු සිහිනයක් බව වටහා ගැනීමත් සමඟ පසුබෑමට වැඩි යමක් කළ හැකි යැයි මම සිතමි.
ජිම් බර්ගර්

1
මෙය -1 ට හේතුව කුමක්දැයි විශ්වාස නැත. එය වඩාත්ම විස්තරාත්මක පිළිතුර නොවේ, නමුත් ඔහු ද වැරදිය.
නීතිවිරෝධී ක්‍රමලේඛකයා

13

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


3
වසන්ත බෝංචි පෙරනිමියෙන් සිංගල්ටන් නොවේද?
සිහින්

3
ඔව්, නමුත් මම අදහස් කළේ 'කේතීකරණ' සිංගල්ටන් ය. මම 'සිංගල්ටන් එකක්' ලියා නැත (එනම් නිර්මාණ රටාව අනුව පෞද්ගලික ඉදිකිරීම්කරුවෙකු වන යඩා යඩා යඩා සමඟ) - නමුත් ඔව්, වසන්තය සමඟ මම එක් අවස්ථාවක් භාවිතා කරමි.
prule

4
ඉතින් අනෙක් අය එය කරන විට, එය හරි (මම පසුව එය භාවිතා කරන්නේ නම්), නමුත් අනෙක් අය එය කර මම එය භාවිතා නොකරන්නේ නම් එය නපුරු ද?
ඩයිනියස්

11

සිංගල්ටන් යනු රටාවක් වන අතර එය වෙනත් ඕනෑම මෙවලමක් මෙන් භාවිතා කළ හැකිය.

සිංගල්ටන් එකක නරක කොටස සාමාන්‍යයෙන් පරිශීලකයා වේ (නැතහොත් එය කිරීමට සැලසුම් කර නොමැති දේවල් සඳහා සිංගල්ටන් නුසුදුසු ලෙස භාවිතා කළ යුතු යැයි මම පැවසිය යුතුය). ලොකුම වැරදිකරු වන්නේ ව්‍යාජ ගෝලීය විචල්‍යයක් ලෙස සිංගල්ටන් භාවිතා කිරීමයි.


1
ස්තූතියි ලොකි :) හරියටම මගේ අදහස. මුළු මායාකාරියන් දඩයම මට මතක් කර දෙන්නේ ගොටෝ විවාදයයි. මෙවලම් ඒවා භාවිතා කරන්නේ කෙසේදැයි දන්නා පුද්ගලයින් සඳහා ය; ඔබ අකමැති මෙවලමක් භාවිතා කිරීම ඔබට අනතුරුදායක විය හැකි බැවින් එය වළක්වා ගන්න, නමුත් එය නිසි ලෙස භාවිතා කිරීමට ඉගෙන නොගන්නා ලෙස / නොකිරීමට අන් අයට නොකියන්න. මම හරියටම "ගැති-සිංගල්ටන්" නොවේ, නමුත් මා සතුව එවැනි මෙවලමක් ඇති අතර එය භාවිතා කිරීම සුදුසු තැන මට දැනේ. කාලය.
dkellner

8

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

තනි වස්තූන් ඒවායින් නිත්‍ය වස්තූන් වෙත ගමන් කිරීම ඉතා අපහසු කරයි.

එසේම, නූල් රහිත ආරක්ෂිත තනි තට්ටුවක් ලිවීම පහසුය.

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

void some_class::some_function(parameters, service_provider& srv)
{
    srv.get<error_logger>().log("Hi there!");
    this->another_function(some_other_parameters, srv);
}

4
සෑම ක්‍රමයක් සඳහාම තර්කය සම්මත කිරීම දීප්තිමත් ය, එය ඔබගේ api දූෂණය කරන්නේ කෙසේද යන්න අවම වශයෙන් ඉහළම ක්‍රම 10 ට යා යුතුය.
ඩයිනියස්

එය පැහැදිලිවම අඩුපාඩුවක් වන අතර, භාෂාව විසින් හසුරුවා ගත යුතු එකක්, කෙසේ හෝ කැදැලි ඇමතුම් වලට ප්‍රචාරය කරන තර්ක මගින්, නමුත් එවැනි සහයෝගයක් නොමැති නම්, එය අතින් කළ යුතුය. පද්ධති ඔරලෝසුව නිරූපණය කරන වස්තුවක් වැනි ස්වාභාවික සිංගල්ටන් පවා කරදර ඇතිවීමේ හැකියාව ඇති බව සලකන්න. උදාහරණයක් ලෙස, ඔබ ඔරලෝසු මත යැපෙන කේතය (බහු තීරුබදු විදුලි මීටරයක් ​​සිතන්න) පරීක්ෂණ සමඟ ආවරණය කරන්නේ කෙසේද?
රෝමන් ඔඩයිස්කි

ඔබ පරීක්ෂා කරන්නේ කුමක් ද යන්න මත රඳා පවතී, ඔබ සිංගල්ටන් පරීක්‍ෂා නොකරන්නේ නම්, එය හැසිරෙන ආකාරය ගැන ඔබ සැලකිලිමත් වන්නේ ඇයි, ඔබේ දුරස්ථ වස්තුව 2 එකිනෙකාගේ හැසිරීම මත රඳා පවතී නම්, එය
සිංගල්ටන්

කැදැලි ඇමතුම් සඳහා ප්‍රචාරණය කළ හැකි භාෂාව ඔබට ලබා දිය හැකිද?
ඩයිනියස්

1
ඔබට එක් මොඩියුලයක් තවත් එකක් මත රඳා පවතී නම් සහ එය විහිළුවට ලක් කිරීමට ඔබට නොහැකි නම්, එය තනි පුද්ගලයෙක්ද නැද්ද යන්න නොසලකා ඔබට අපහසු වනු ඇත. මිනිසුන් බොහෝ විට උරුම මාර්ගය භාවිතා කරයි, එහිදී ඔවුන් සංයුතිය භාවිතා කළ යුතුය, නමුත් උරුමය නරක යැයි ඔබ නොකියයි, සහ OOP සෑම වියදමකින්ම වැළකී සිටිය යුතුය, මන්ද බොහෝ අය එහි සැලසුම් වැරදි සිදු කරන නිසාද, නැත්නම් ඔබද?
ඩයිනියස්

8

සිංගල්ටන්වල ​​ඇති ගැටළු වන්නේ විෂය පථය වැඩි කිරීම හා ඒ නිසා සම්බන්ධ වීමයි. ඔබට එක් අවස්ථාවකට ප්‍රවේශය අවශ්‍ය වන අවස්ථා කිහිපයක් ඇති බව ප්‍රතික්ෂේප කිරීමක් නොමැති අතර එය වෙනත් ආකාරවලින් ඉටු කර ගත හැකිය.

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

FWIW, ඔබ එය ඒකක පරීක්ෂණයක් කිරීමට උත්සාහ කරන විට එය PIA නම් එය නිදොස්කරණය, දෝෂ නිවැරදි කිරීම හෝ වැඩි දියුණු කිරීමට උත්සාහ කරන විට එය PIA වෙත යයි.


8

අදහස් දැක්වීමකින් තොරව කේතීකරණය කිරීමේදී ක්‍රිස් රීත් විසින් මෙම විෂය පිළිබඳ මෑත ලිපිය .

සටහන: අදහස් දැක්වීමකින් තොරව කේතනය කිරීම තවදුරටත් වලංගු නොවේ. කෙසේ වෙතත්, සම්බන්ධ කර ඇති ලිපිය වෙනත් පරිශීලකයෙකු විසින් ක්ලෝන කර ඇත.

http://geekswithblogs.net/AngelEyes/archive/2013/09/08/singleton-i-love-you-but-youre-bringing-me-down-re-uploaded.aspx


7

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

කෙසේ වෙතත්, "යෙදුම් විෂය පථ සේවා" ඇත (සංරචක අන්තර්ක්‍රියා කරන පණිවිඩ පද්ධතියක් ගැන සිතන්න) - මෙම තනි ඇමතුම් සඳහා වන ඇමතුම්, "පණිවිඩ පණිවිඩ" - පන්තියක් "SendMessage (...)" ක්‍රමයක් ඇත.

එවිට ඔබට පහත සඳහන් දෑ සෑම තැනකින්ම කළ හැකිය:

MessageQueue.Current.SendMessage (නව MailArrivedMessage (...));

ඇත්ත වශයෙන්ම, කරන්න:

MessageQueue.Current.RegisterReceiver (මෙය);

IMessageReceiver ක්‍රියාත්මක කරන පන්ති වල.


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

1
එසේම අපට ගෝලීය පාරිභෝගික ඕර්ඩර් ලැයිස්තුවක් නොතිබිය යුත්තේ ඇයි? එබැවින් අපට එය මැසේජ් ක්විව් වැනි ඕනෑම තැනක සිට හොඳින් ඇමතිය හැකිය. පිළිතුර දෙකටම එක හා සමාන යැයි මම විශ්වාස කරමි: එය effectively ලදායී ලෙස ගෝලීය විචල්‍යතාවයක් ඇති කරයි.
ලෙජන්ඩ් දිග

7

නූල් නොවන වස්තූන් බොහෝ දෙනෙක් තනි රටාවකට ආරක්ෂිතව තබති. ඩේටාකොන්ටෙක්ස්ට් නූල් ආරක්ෂිත නොවන අතර එය තනිකරම වැඩ ඒකකයක් වන වස්තුවක් වුවද, ඩේටාකොන්ටෙක්ස්ට් ( ලින්ක් සිට එස්.එල්.කේ දක්වා ) තනි රටාවකින් කරන ලද උදාහරණ මම දැක ඇත්තෙමි .


බොහෝ අය අනාරක්ෂිත බහු-නූල් කේත ලියයි, එයින් අදහස් කරන්නේ අප නූල් ඉවත් කළ යුතුද?
ඩයිනියස්

Ain ඩේනියස්: ඇත්ත වශයෙන්ම ඔව්. IMO හි සුපුරුදු සමගාමී මුදල් ආකෘතිය බහු ක්‍රියාවලියක් විය යුතු අතර, ක්‍රියාවලීන් දෙකකට (1) එකිනෙකාට පහසුවෙන් පණිවිඩ යැවීමට සහ / හෝ (2) අවශ්‍ය පරිදි මතකය බෙදා ගැනීමට ක්‍රමයක් ඇත. ඔබට සෑම දෙයක්ම බෙදා ගැනීමට අවශ්‍ය නම් නූල් දැමීම ප්‍රයෝජනවත් වේ , නමුත් ඔබට එය කිසි විටෙකත් අවශ්‍ය නොවේ. මුළු ලිපින අවකාශය බෙදා ගැනීමෙන් එය අනුකරණය කළ හැකි නමුත් එය රටා විරෝධී රටාවක් ලෙස ද සැලකේ.
cHao

Ain ඩේනියස්: ඇත්ත වශයෙන්ම, එය උපකල්පනය කරන්නේ අවංක-යහපත්-යහපත් එකඟතාව කිසිසේත් අවශ්‍ය නොවන බවයි. බොහෝ විට ඔබට අවශ්‍ය වන්නේ මෙහෙයුම් පද්ධතිය වෙනත් දෙයක් කිරීමට බලා සිටින අතරතුර එක් දෙයක් කිරීමට හැකිවීමයි. (නිදසුනක් ලෙස සොකට්ටුවකින් කියවන විට UI යාවත්කාලීන කිරීම.) හොඳ අසින්ක් ඒපීඅයි මඟින් විශාල බහුතර අවස්ථාවන්හිදී පූර්ණ නූල් දැමීම අනවශ්‍ය කරයි.
cHao

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

Ain ඩේනියස්: බොහෝ අවස්ථාවල ඔව්. (නිගමනයට ඇත්තටම හැකි ඔබ මන්දගාමී , ඔබ මේ සංකලනයේ සමමුහුර්ත එකතු නම්. මෙම multithreading බොහෝ මිනිසුන් ගේ පළමු අදහස විය යුතු නැහැ ඇයි සඳහා ඉතා හොඳ උදාහරණයකි.) වෙනත් අවස්ථාවලදී, එය බෙදාහදා ක්රියාවලීන් දෙකක් ඇති වඩා හොඳ විය කැමතියි අවශ්‍ය දේවල්. ඇත්ත වශයෙන්ම, ඔබට මතකයන් බෙදා ගැනීම සඳහා ක්‍රියාවලීන් සඳහා කටයුතු කළ යුතුය. එහෙත්, අවංකවම, මම එය හොඳ දෙයක් ලෙස දකිමි - සියල්ල-බෙදාගැනීමේ මාදිලියට පෙරනිමි වීමට වඩා හොඳය. කුමන කොටස් බෙදාගෙන ඇත්ද යන්න සහ ඒ සඳහා නූල් ආරක්ෂිත විය යුත්තේ කුමන කොටස්ද යන්න පැහැදිලිව පැවසීම (සහ එසේනම් ඉතා මැනවින් දැන ගැනීම) අවශ්‍ය වේ.
cHao

6

කිසිවෙකු තවමත් පවසා නැති සිංගල්ටන් ගැන තවත් එක් දෙයක් මෙන්න.

බොහෝ අවස්ථාවන්හීදී “තනිකඩභාවය” යනු එහි අතුරු මුහුණතේ ලක්ෂණයට වඩා සමහර පන්ති සඳහා ක්‍රියාත්මක කිරීම පිළිබඳ විස්තරයකි. පාලන බහාලුම් ප්‍රතිලෝම කිරීම මෙම ලක්ෂණය පන්ති පරිශීලකයින්ගෙන් සැඟවිය හැක; ඔබට අවශ්‍ය වන්නේ ඔබේ පන්තිය සිංගල්ටන් ලෙස සලකුණු කිරීමයි ( @Singletonඋදාහරණයක් ලෙස ජාවා හි විවරණ සහිතව ) සහ එය එයයි; IoCC විසින් ඉතිරි දේ කරනු ඇත. ඔබගේ සිංගල්ටන් උදාහරණයට ගෝලීය ප්‍රවේශය සැපයීමට ඔබට අවශ්‍ය නැත, මන්ද ප්‍රවේශය දැනටමත් කළමනාකරණය කර ඇත්තේ IoCC විසිනි. මේ අනුව IoC Singletons වල කිසිදු වරදක් නොමැත.

IoC සිංගල්ටන් වලට ප්‍රතිවිරුද්ධ GoF Singletons getInstance () ක්‍රමය හරහා අතුරුමුහුණතේ “තනිකඩභාවය” නිරාවරණය කළ යුතු අතර එමඟින් ඉහත සඳහන් සෑම දෙයකින්ම ඔවුන් පීඩා විඳිති.


3
මගේ මතය අනුව, "තනිකඩභාවය" යනු ධාවන කාල පරිසර විස්තරයක් වන අතර එය පන්ති කේතය ලිවූ ක්‍රමලේඛකයා විසින් නොසැලකිය යුතුය. ඒ වෙනුවට, එය USER පන්තිය විසින් සලකා බැලිය යුතු කරුණකි. ඇත්ත වශයෙන්ම කොපමණ අවස්ථා අවශ්‍යදැයි දන්නේ USER පමණි.
පෘථිවි එන්ජිම

5

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


නියමයි! සම්පූර්ණයෙන්ම එකඟ වන්න! නමුත් ඔබට තවත් බොහෝ දේ විස්තාරණය කළ හැකිය. කුමන මෝස්තර රටා බහුලව නොසලකා හරිනු ලැබේද යන්න සහ “නිසි ලෙස හා අවම වශයෙන්” තනි බොත්තම් භාවිතා කරන්නේ කෙසේද යන්න වැනි. පහසු වඩා පවසයි සිදු ! : P
cregox

මූලික වශයෙන් විකල්පය වන්නේ වස්තූන් ගෝලීය රාජ්‍ය හරහා ප්‍රවේශ වීමට වඩා ක්‍රම පරාමිතීන් හරහා ගමන් කිරීමයි.
ලෙජන්ඩ් දිග

5

පළමුවෙන්ම පංතියක් සහ එහි හවුල්කරුවන් යැපෙන්නන් කෙරෙහි අවධානය යොමු කරනවාට වඩා ඔවුන්ගේ අපේක්ෂිත අරමුණ ඉටු කළ යුතුය. ජීවන චක්‍ර කළමනාකරණය (අවස්ථා නිර්මාණය වූ විට සහ ඒවා විෂය පථයෙන් බැහැර වූ විට) පන්ති වගකීම්වල කොටසක් නොවිය යුතුය. මේ සඳහා පිළිගත් හොඳම ක්‍රමය වන්නේ පරායත්තතා එන්නත් භාවිතා කරමින් පරායත්තතා කළමනාකරණය කිරීම සඳහා නව අංගයක් සැකසීම හෝ වින්‍යාස කිරීමයි.

බොහෝ විට මෘදුකාංග වඩාත් සංකීර්ණ වන විට සිංගල්ටන් පන්තියේ විවිධ තත්වයන් සහිත ස්වාධීන අවස්ථා කිහිපයක් තිබීම අර්ථවත් කරයි. එවැනි අවස්ථා වලදී සිංගල්ටන් අල්ලා ගැනීම සඳහා කේතය කැප කිරීම වැරදිය. Singleton.getInstance()කුඩා සරල පද්ධති සඳහා භාවිතා කිරීම හරි විය හැකි නමුත් එකම පන්තියේ වෙනස් අවස්ථාවක් අවශ්‍ය වූ විට එය ක්‍රියා නොකරයි.

කිසිදු පංතියක් තනිකඩයෙකු ලෙස නොසිතිය යුතු අතර එය එහි භාවිතය හෝ යැපෙන්නන් වින්‍යාස කිරීමට භාවිතා කරන ආකාරය පිළිබඳ යෙදුමක් විය යුතුය. ඉක්මන් හා අප්රසන්න දෙයක් සඳහා මෙය වැදගත් නොවේ - හුදෙක් දෘඩ කේතීකරණයෙන් කියවෙන්නේ ගොනු මාර්ග වැදගත් නොවන නමුත් විශාල යෙදුම් සඳහා එවැනි පරායත්තතාවයන් සාධනය කර DI භාවිතා කරමින් වඩාත් සුදුසු ආකාරයෙන් කළමනාකරණය කළ යුතු බවයි.

පරීක්ෂණයේදී සිංගල්ටන් විසින් ඇති කරන ගැටළු ඔවුන්ගේ දෘඩ කේත කරන ලද තනි භාවිත නඩුවේ / පරිසරයේ රෝග ලක්ෂණයකි. පරීක්ෂණ කට්ටලය සහ බොහෝ පරීක්ෂණ එක් එක් පුද්ගලයා වන අතර තනි කේතයක් දෘඩ කේතීකරණයට නොගැලපෙන දෙයක් වෙන් කරයි.


4

ඒවා මූලික වශයෙන් වස්තු නැඹුරු ගෝලීය විචල්‍යයන් වන බැවින්, ඔබට සාමාන්‍යයෙන් ඔබේ පන්ති ඔබට අවශ්‍ය නොවන පරිදි සැලසුම් කළ හැකිය.


ඔබ පන්තිය එක් අවස්ථාවකට පමණක් සීමා නොවන්නේ නම්, ඔබේ පන්තියේ ස්ථිතික සාමාජිකයින් අවශ්‍ය වන්නේ සෙමෆෝර්ස් විසින් කළමනාකරණය කරනු ලබන අතර එය එකම දෙයකට එළියට එනු ඇත! ඔබ යෝජිත විකල්පය කුමක්ද?
ජීච්

මට "මේන්ස්ක්‍රීන්" සමඟ විශාල යෙදුමක් ඇත, මෙම තිරය කුඩා මෝඩල් / මොඩල් නොවන කවුළු / යූඅයි ආකෘති විවෘත කරයි. IMHO මට හැඟෙන්නේ MainScreen තනි තනි විය යුතු බැවින් නිදසුනක් ලෙස, යෙදුමේ corner ත කෙළවරක කොතැනක හෝ ඇති විජට් එකකට එහි තත්වය MainScreen හි තත්ව තීරුව තුළ පෙන්වීමට අවශ්‍ය නම්, එය කළ යුත්තේ MainScreen.getInstance (). SetStatus ( "සමහර පෙළ"); විකල්පයක් ලෙස ඔබ යෝජනා කරන්නේ කුමක්ද? යෙදුම පුරාම MainScreen පසුකරන්න ?? : ඩී
සැල්වින් ෆ්‍රැන්සිස්

2
Al සැල්වින් ෆ්‍රැන්සිස්: මම නිර්දේශ කරන දෙය නම්, ඔබ නොසලකන දේවල් ගැන සැලකිලිමත් වන වස්තූන් තිබීම ඔබ නවතා දමා එකිනෙකා සමඟ පටලවා ගැනීමට යෙදුම හරහා හොරෙන් යන්න. :) ඔබගේ උදාහරණය සිදුවීම් සමඟ වඩා හොඳ වනු ඇත. ඔබ සිදුවීම් නිවැරදිව කරන විට, විජට් එකක ප්‍රධාන තිරයක් තිබේද යන්න ගැන සැලකිලිමත් විය යුතු නැත; එය විකාශනය කරන්නේ "හේයි, දේවල් සිදු විය", සහ "සිදුවූ දේ" සිදුවීමට දායක වී ඇති ඕනෑම දෙයක් (එය මේන්ස්ක්‍රීන්, විජට් ටෙස්ට් හෝ වෙනත් දෙයක් වේවා!) එයට ප්‍රතිචාර දැක්විය යුතු ආකාරය තීරණය කරයි. බව OOP ආකාරය වේ යැයි කියනු කෙසේ හෝ කළ යුතු. :)
cHao

1
Al සැල්වින් බොහෝ සංරචක විසින් 'නිහ ly ව' යාවත්කාලීන කරන්නේ නම්, නිදොස් කිරීමේ දී මේන්ස්ක්‍රීන් ගැන තර්ක කිරීම කොතරම් දුෂ්කර දැයි සලකා බලන්න. සිංගල්ටන් නරක වීමට ඔබේ උදාහරණය කදිම හේතුවකි.
ලෙජන්ඩ් දිග
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.