යැපුම් ප්‍රතිලෝම මූලධර්මය භාවිතයෙන් ක්‍රියාත්මක වේ. යැපුම් ප්‍රතිලෝම

ගෙදර / රණ්ඩු වෙනවා

ඇත්ත වශයෙන්ම, සියලු මූලධර්ම ඝණඔවුන් එකිනෙකාට සමීපව සම්බන්ධ වන අතර ඔවුන්ගේ ප්‍රධාන අරමුණ වන්නේ උසස් තත්ත්වයේ, පරිමාණය කළ හැකි මෘදුකාංග නිර්මාණය කිරීමට උපකාර කිරීමයි. නමුත් අවසාන මූලධර්මය ඝණඇත්ත වශයෙන්ම ඔවුන්ගේ පසුබිමට එරෙහිව කැපී පෙනේ. පළමුව, මෙම මූලධර්මය සකස් කිරීම දෙස බලමු. ඒ නිසා, පරායත්තතා ප්‍රතිලෝම මූලධර්මය (යැපීම් ප්‍රතිලෝම මූලධර්මය - DIP): “වියුක්තයන් මත යැපීම. නිශ්චිත කිසිවක් මත යැපීමක් නොමැත. ”. මෘදුකාංග සංවර්ධන ක්ෂේත්රයේ සුප්රසිද්ධ විශේෂඥ රොබට් මාටින් ද මූලධර්මය අවධාරණය කරයි DIPසහ වෙනත් මූලධර්ම අනුගමනය කිරීමේ ප්රතිඵලයක් ලෙස එය සරලව ඉදිරිපත් කරයි ඝණ- විවෘත / සංවෘත මූලධර්මය සහ ලිස්කොව් ආදේශන මූලධර්මය. පළමුවැන්න නව වෙනස්කම් හඳුන්වාදීම සඳහා පන්තිය වෙනස් නොකළ යුතු බව පවසන බව මතක තබා ගන්න, දෙවැන්න උරුමය ගැන සැලකිලිමත් වන අතර වැඩසටහනේ නිවැරදි ක්‍රියාකාරිත්වයට බාධා නොකර යම් මූලික වර්ගයක ව්‍යුත්පන්න වර්ග ආරක්ෂිතව භාවිතා කිරීම උපකල්පනය කරයි. රොබට් මාටින් මෙම මූලධර්මය මුලින්ම සකස් කළේ පහත පරිදිය.

1) ඉහළ මට්ටම්වල ඇති මොඩියුල පහළ මට්ටමේ මොඩියුල මත රඳා නොපවතී. මට්ටම් දෙකෙහිම මොඩියුල වියුක්තයන් මත රඳා පැවතිය යුතුය.

2) වියුක්ත කිරීම් විස්තර මත රඳා නොපවතී. විස්තර වියුක්තයන් මත රඳා පැවතිය යුතුය.

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

පොදු පන්තියේ බාර්ඩ් (පෞද්ගලික ගිටාර් ගිටාර්; පොදු බාර්ඩ් (ගිටාර් ගිටාර්) (මෙය.ගිටාර් = ගිටාර්; ) පොදු හිස් වාදනය () (ගිටාර්. ප්ලේ (); ) )

පොදු පන්තියේ බාර්ඩ් (

පුද්ගලික ගිටාර් ගිටාර්;

පොදු බාර්ඩ් (ගිටාර් ගිටාර්)

මෙය. guitar = guitar ;

පොදු හිස් සෙල්ලම් ()

ගිටාරය සෙල්ලම් ();

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

ගොනුව Instrument.java:

පොදු අතුරුමුහුණත් උපකරණය (නිෂ්ප්‍රභ නාට්‍ය (); )

පොදු අතුරුමුහුණත් මෙවලම (

void play ();

ගොනුව Guitar.java:

පන්තියේ ගිටාර් උපකරණය ක්‍රියාත්මක කරයි (@Override public void play() ( System.out.println("Play Guitar!"); )

පන්තියේ ගිටාර් උපකරණ උපකරණ (

@අතික්‍රමණය කරන්න

පොදු හිස් සෙල්ලම් ()

පද්ධති. පිටතට . println ("ගිටාර් වාදනය කරන්න!");

ගොනුව Lute.java:

public class Lute Instrument (@Override public void play() ( System.out.println("Play Lute!"); )

පොදු පන්තියේ ලූට් උපකරණය (

@අතික්‍රමණය කරන්න

පොදු හිස් සෙල්ලම් ()

පද්ධති. පිටතට . println("Play Lute!");

ඊට පස්සේ අපි පන්තිය මාරු කළා බාර්ඩ්, ඒ නිසා, අවශ්‍ය නම්, අපට අවශ්‍ය ඒවා සමඟ ක්‍රියාත්මක කිරීම් ප්‍රතිස්ථාපනය කළ හැකිය. මෙය නිර්මාණය කරන ලද පද්ධතියට අමතර නම්‍යශීලී බවක් හඳුන්වා දෙන අතර එහි සම්බන්ධ කිරීම අඩු කරයි (එකිනෙකා මත පන්තිවල ශක්තිමත් පරායත්තතා).

පොදු පන්තියේ බාර්ඩ් (පෞද්ගලික උපකරණ මෙවලම; පොදු බාර්ඩ්() () පොදු හිස් වාදනය () (උපකරණ. වාදනය (); ) පොදු හිස් උපකරණ (උපකරණ උපකරණ) (මෙය.උපකරණ = උපකරණය; ) )

පොදු පන්තියේ බාර්ඩ් (

පුද්ගලික උපකරණ උපකරණ;

පිළිතුරු 2ක්

හොඳ ප්‍රශ්නයක් - ප්‍රතිලෝම යන වචනය තරමක් පුදුම සහගතය (DIP යෙදීමෙන් පසු, පහළ මට්ටමේ යැපුම් මොඩියුලය පැහැදිලිවම ඉහළ මට්ටමේ ඇමතුම් මොඩියුලය මත රඳා නොපවතී: ඇමතුම්කරු හෝ යැපෙන්නන් දැන් අමතර වියුක්තයක් හරහා වඩාත් ලිහිල්ව සම්බන්ධ වී ඇත. )

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

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

සංස්කරණය කරන්නපැහැදිලි කිරීමට පමණි:

"සමහර තැනක මම එය පරායත්ත ප්‍රතිලෝම ලෙසද දකිමි"

ප්‍රතිලෝම:යෙදුමක සිට බහාලුමකට යැපුම් කළමනාකරණය ප්‍රතිලෝම කිරීම (උදා. වසන්තය).

යැපුම් එන්නත්:

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

පාලනයේ ප්‍රතිලෝම (IoC) ගැන කුමක් කිව හැකිද?

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

සැලසුම් මාර්ගෝපදේශයක් ලෙස පාලනය ප්‍රතිලෝම කිරීම පහත අරමුණු ඉටු කරයි:

  • නිශ්චිත කාර්යයක් ක්රියාත්මක කිරීමේ සිට ක්රියාත්මක කිරීම විසන්ධි කිරීමක් ඇත.
  • සෑම මොඩියුලයකටම එය කිරීමට අදහස් කරන දේ කෙරෙහි අවධානය යොමු කළ හැකිය.
  • මොඩියුල වෙනත් පද්ධති කරන්නේ කුමක්ද යන්න පිළිබඳව උපකල්පන නොකරයි, නමුත් ඒවායේ කොන්ත්‍රාත්තු මත රඳා පවතී.
  • මොඩියුල ආදේශ කිරීම අනෙකුත් මොඩියුලවලට බලපාන්නේ නැත.

වැඩි විස්තර සඳහා බලන්න.

අවසන් යාවත්කාලීන කිරීම: 03/11/2016

යැපුම් ප්‍රතිලෝම මූලධර්මයපරීක්ෂා කිරීමට, වෙනස් කිරීමට සහ යාවත්කාලීන කිරීමට පහසු ලිහිල්ව සම්බන්ධ වූ ආයතන සෑදීමට යැපුම් ප්‍රතිලෝම මූලධර්මය භාවිතා කරයි. මෙම මූලධර්මය පහත පරිදි සකස් කළ හැකිය:

ඉහළ මට්ටමේ මොඩියුල පහළ මට්ටමේ මොඩියුල මත රඳා නොපවතී. දෙකම වියුක්තයන් මත රඳා පැවතිය යුතුය.

වියුක්ත කිරීම් විස්තර මත රඳා නොපවතී. විස්තර වියුක්තයන් මත රඳා පැවතිය යුතුය.

මූලධර්මය තේරුම් ගැනීමට, පහත උදාහරණය සලකා බලන්න:

පන්ති පොත ( public string Text ( get; set; ) public ConsolePrinter Printer ( get; set; ) public void Print() ( Printer.Print(Text); ) ) class ConsolePrinter ( public void Print(string text) ( Console.WriteLine (පෙළ); ) )

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

දැන් අපි අපගේ පන්ති යැපුම් ප්‍රතිලෝම මූලධර්මයට අනුකූලව ගෙන ඒමට උත්සාහ කරමු, පහත මට්ටමේ ක්‍රියාත්මක කිරීමෙන් වියුක්තයන් වෙන් කරයි:

අතුරුමුහුණත IPrinter (void Print(string text); ) class Book ( public string Text ( get; set; ) public IPrinter Printer ( get; set; ) public Book(IPrinter printer) ( this.Printer = printer; ) public void Print( ) ( Printer.Print(Text); ) පන්තියේ ConsolePrinter: IPrinter ( public void Print(string text) ( Console.WriteLine("Print to console"); ) ) class HtmlPrinter: IPrinter ( public void Print(string text) ( Console.WriteLine("html වලින් මුද්‍රණය කරන්න"); )

පොත් මුද්‍රණ සාරාංශය දැන් කොන්ක්‍රීට් ක්‍රියාත්මක කිරීම් වලින් වෙන් කර ඇත. එහි ප්‍රතිඵලයක් වශයෙන්, Book class සහ ConsolePrinter පන්තිය යන දෙකම IPrinter වියුක්තකරණය මත රඳා පවතී. ඊට අමතරව, අපට දැන් IPrinter වියුක්තකරණයේ අතිරේක පහත් මට්ටමේ ක්‍රියාත්මක කිරීම් නිර්මාණය කළ හැකි අතර ඒවා වැඩසටහන තුළ ගතිකව යෙදිය හැක:

පොත් පොත = නව පොත (නව කොන්සෝල මුද්‍රණ යන්ත්‍රය()); පොත.මුද්රණය (); book.Printer = නව HtmlPrinter(); පොත.මුද්රණය ();

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

මෙම විස්තරය ජාවා අධ්‍යයනය කරන සිසුන් සමඟ පන්ති සඳහා සූදානම් වීම සඳහා ව්ලැඩිමීර් මැට්වීව් සමඟ එක්ව සංවර්ධනය කරන ලදී.

මෙම ලිපි මාලාවේ අනෙකුත් ලිපි:

"ඇබ්බැහි වීම" යන්නෙහි නිර්වචනය සමඟින් මම ආරම්භ කරමි. ඇබ්බැහි වීම යනු කුමක්ද? ඔබගේ කේතය යම් පන්තියක් අභ්‍යන්තරව භාවිතා කරන්නේ නම් හෝ යම් පන්තියක හෝ ශ්‍රිතයක ස්ථිතික ක්‍රමයක් පැහැදිලිව හඳුන්වන්නේ නම්, මෙය පරායත්තතාවයකි. මම උදාහරණ සහිතව පැහැදිලි කරන්නම්:

පහත, A පන්තිය, someMethod() නම් ක්‍රමයක් තුළ, පැහැදිලිවම B පන්තියේ වස්තුවක් නිර්මාණය කර එහි ක්‍රමය someMethodOfB() ලෙස හඳුන්වයි.

පොදු පන්තිය A ( සමහර ක්‍රම අවලංගුයි() (B b = නව B(); b.someMethodOfB(); ) )

ඒ හා සමානව, උදාහරණයක් ලෙස, B පන්තිය පැහැදිලිවම පද්ධති පන්තියේ ස්ථිතික ක්ෂේත්‍ර සහ ක්‍රම වෙත ප්‍රවේශ වේ:

පොදු පන්තියේ B (someMethodOfB() අවලංගුයි ( System.out.println("Hello world"); ) )

සෑම අවස්ථාවකදීම, ඕනෑම පන්තියක් (A වර්ගය) ස්වාධීනව කිසියම් පන්තියක් (B වර්ගය) නිර්මාණය කරන විට හෝ ස්ථිතික ක්ෂේත්‍ර හෝ පන්ති සාමාජිකයින්ට පැහැදිලිව ප්‍රවේශ වන විට, මෙය හැඳින්වේ කෙලින්මඇබ්බැහි වීම. එම. වැදගත්: තමා තුළම පන්තියක් වෙනත් පන්තියක් සමඟ ක්‍රියා කරන්නේ නම්, මෙය යැපීමකි. එය ද මෙම පන්තිය තමා තුළම නිර්මාණය කරන්නේ නම්, මෙය කෙලින්මඇබ්බැහි වීම.

සෘජු යැපීම් වල ඇති වැරැද්ද කුමක්ද? ස්වාධීනව තමන් තුළම තවත් පන්තියක් නිර්මාණය කරන පන්තියක් මෙම පන්තියට "තදින්" බැඳී ඇති නිසා සෘජු පරායත්තතා නරක ය. එම. B = new B() බව පැහැදිලිව ලියා ඇත්නම්; , එවිට A පන්තිය සෑම විටම B පන්තිය සමඟ ක්‍රියා කරන අතර වෙනත් පන්තියක් නැත. එසේත් නැතිනම් System.out.println("..."); එවිට පන්තිය සෑම විටම System.out වෙත ප්‍රතිදානය කරන අතර වෙන කොහේවත් නොවේ.

කුඩා පන්ති සඳහා, යැපීම් භයානක නොවේ. මෙම කේතය ඉතා හොඳින් ක්‍රියාත්මක විය හැක. නමුත් සමහර අවස්ථාවලදී, ඔබේ A පන්තියට විවිධ පන්තිවල පරිසරය තුළ විශ්වීයව වැඩ කිරීමට හැකි වීම සඳහා, පන්තිවල වෙනත් ක්රියාත්මක කිරීම් අවශ්ය විය හැකිය - පරායත්තතා. එම. උදාහරණයක් ලෙස, ඔබට අවශ්‍ය වන්නේ B පන්තිය නොව, එම අතුරුමුහුණත සහිත තවත් පන්තියකි, නැතහොත් System.out නොවේ, නමුත් උදාහරණයක් ලෙස, ලොගර් වෙත ප්‍රතිදානය කරන්න (උදාහරණයක් ලෙස log4j).

සෘජු සම්බන්ධතාවය පහත පරිදි ප්‍රස්ථාරිකව පෙන්විය හැක:

එම. ඔබ ඔබේ කේතයේ A පන්තිය සාදන විට: A a = නව A(); ඇත්ත වශයෙන්ම, A පන්තියක් පමණක් නොව, යැපෙන පන්තිවල සම්පූර්ණ ධුරාවලියක් නිර්මාණය කර ඇත, උදාහරණයක් ලෙස පහත පින්තූරයේ ඇත. මෙම ධුරාවලිය "දෘඩ" වේ: තනි පන්තිවල ප්‍රභව කේතය වෙනස් නොකර, ඔබට ධූරාවලියේ ඇති පන්ති කිසිවක් ප්‍රතිස්ථාපනය කළ නොහැක. එබැවින්, එවැනි ක්රියාත්මක කිරීමක පන්තියේ A වෙනස්වන පරිසරයකට දුර්වල ලෙස අනුගත වේ. බොහෝ දුරට, ඔබ එය ලියා ඇති විශේෂිත කේතය හැර වෙනත් කිසිදු කේතයක එය භාවිතා කළ නොහැක.

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

පොදු පන්තිය A (පුද්ගලික අවසාන B b; පොදු A(B b) ( this.b = b; ) public void someMethod() (b.someMethodOfB(); ) )

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

B b = නව B(); A a = නව A(b); a.some Method();

සියලුම පන්ති සඳහා එකම ක්රියා පටිපාටිය නැවත නැවතත් සිදු කරන්නේ නම්, i.e. පන්තියේ D හි අවස්ථාවක් B පන්තියේ නිර්මාපකයාට, එහි පරායත්තතා E සහ F පන්තියේ D හි නිර්මාපකයා වෙත යවන්න, එවිට ඔබට සියලු පරායත්තතා ප්‍රතිලෝම අනුපිළිවෙලින් සාදන ලද කේතයක් ලැබෙනු ඇත:

G g = නව G(); H h = නව H(); F f = නව (g,h); E e = නව E(); D d = නව D(e,f); B b = නව B(d); A a = නව A(b); a.some Method();

මෙය මෙසේ චිත්‍රක ආකාරයෙන් පෙන්විය හැක.

ඔබ පින්තූර 2 ක් සංසන්දනය කළහොත් - ඉහත පින්තූරය සෘජු පරායත්තතා සමඟ සහ දෙවන පින්තූරය පරායත්ත එන්නත් සමඟ - ඊතලවල දිශාව ප්‍රතිවිරුද්ධ දිශාවට වෙනස් වී ඇති බව ඔබට පෙනෙනු ඇත. මෙම හේතුව නිසා, ව්‍යාකූලත්වය පරායත්තතාවල "ප්‍රතිලෝම" ලෙස හැඳින්වේ. වෙනත් වචන වලින් කිවහොත්, පරායත්තතා ප්‍රතිලෝම යන්නෙන් අදහස් වන්නේ පන්තිය විසින්ම පරායත්තතා නිර්මාණය නොකරන අතර, ඒවා නිර්මාපකයේ (හෝ වෙනත් ආකාරයකින්) සාදන ලද ආකාරයෙන් ලබා ගැනීමයි.

යැපුම් ප්‍රතිලෝම හොඳ වන්නේ ඇයි? පරායත්ත ප්‍රතිලෝම සමඟින්, ඔබට පන්තියක කේතය වෙනස් නොකර එහි ඇති සියලුම පරායත්තතා ප්‍රතිස්ථාපනය කළ හැක. මෙයින් අදහස් කරන්නේ ඔබේ A පන්තිය එය මුලින් ලියා ඇති වැඩසටහනට වඩා වෙනත් වැඩසටහනක භාවිතය සඳහා නම්‍යශීලීව වින්‍යාසගත කළ හැකි බවයි. එම. යැපුම් ප්‍රතිලෝමයේ මූලධර්මය (සමහර විට පරායත්ත එන්නත් කිරීමේ මූලධර්මය ලෙස හැඳින්වේ) නම්‍යශීලී, මොඩියුලර්, නැවත භාවිතා කළ හැකි කේතයක් ගොඩනැගීමට ප්‍රධාන වේ.

පරායත්ත එන්නත් කිරීමේ අවාසිය ද මුලින්ම බැලූ බැල්මට පෙනේ - මෙම රටාව භාවිතයෙන් නිර්මාණය කරන ලද පන්තිවල වස්තූන් ඉදිකිරීම සඳහා ශ්රම-දැඩි වේ. එබැවින්, යැපුම් එන්නත් කිරීම සාමාන්‍යයෙන් මෙම කාර්යය පහසු කිරීම සඳහා නිර්මාණය කර ඇති සමහර පුස්තකාල සමඟ ඒකාබද්ධව භාවිතා වේ. උදාහරණයක් ලෙස, Google Guice පුස්තකාලවලින් එකක්. සෙමී. .

© 2023 skudelnica.ru -- ආදරය, පාවාදීම, මනෝවිද්‍යාව, දික්කසාදය, හැඟීම්, ආරවුල්