Ո՞րն է կաղապարի մեթոդի ձևավորման ձևանմուշը:
🎉 Դուք կարող եք գտնել նոր և թարմացված գրառումներ ellehallal.dev կայքում։
Սա արագ բլոգ է կաղապարի մեթոդի ձևավորման օրինակի իմ ըմբռնման վերաբերյալ: Դեռևս կան տարրեր, որոնցում ես վստահ չեմ, ուստի խնդրում եմ ազատ զգալ թողնել կարծիքը:
Ծրագրային ապահովման ճարտարագիտության մեջ կաղապարի մեթոդի օրինակը վարքագծային նախագծման օրինաչափություն է, որը սահմանում է գործողության մեջ ալգորիթմի ծրագրի կմախքը՝ որոշ քայլեր տեղափոխելով ենթադասեր: Այն թույլ է տալիս վերասահմանել ալգորիթմի որոշակի քայլեր՝ առանց ալգորիթմի կառուցվածքը փոխելու:
https://en.wikipedia.org/wiki/Template_method_pattern#UML_class_diagram
Եվ եթե դուք մտածում էիք, թե որն է վարքագծային դիզայնի օրինակը.
Դիզայնի վարքագծային օրինաչափություններըդիզայնի օրինաչափություններ են, որոնք բացահայտում են առարկաների միջև հաղորդակցման ընդհանուր ձևերը և իրականացնում այդ օրինաչափությունները: Դրանով այս օրինաչափությունները մեծացնում են այս հաղորդակցության իրականացման ճկունությունը:
https://en.wikipedia.org/wiki/Behavioral_pattern
Իմ հասկացողությունը վերացական դասի շրջանակներում է (բազային դաս), կաղապարի մեթոդը ուրվագծում է ալգորիթմի քայլերը՝ որպես կոնկրետ մեթոդ:
Մեթոդի շրջանակներում այն դասում կանչում է վերացական (պարզունակ գործողություններ) և կոնկրետ մեթոդներ (կոնկրետ գործողություններ)՝ որոշակի հերթականությամբ:
Կաղապարային մեթոդի մեջ կոչվող կոնկրետ մեթոդները ներկայացնում են ալգորիթմի այն մասերը, որոնք ստանդարտ են: Մյուս կողմից, կոչվող վերացական մեթոդները ներկայացնում են հարմարեցվող ասպեկտները: Կաղապարային մեթոդը կարող է նաև բաղկացած լինել միայն վերացական մեթոդներից:
Կոնկրետ դասերը, որոնք տարածվում են բազային դասից, պետք է իրականացնեն վերացական մեթոդներ: Արդյունքում, սա ապահովում է ենթադասերի որոշակի հարմարեցում:
Աբստրակտ դասը կարող է նաև պարունակել hook մեթոդներ, որոնք ենթադասերը կարող են անտեսել: Կեռիկի մեթոդները ավելի մանրամասն նկարագրված են այս բլոգի գրառման մեջ:
Կաղապարի մեթոդի նախագծման օրինաչափության նպատակներից մեկը կոդերի կրկնօրինակումից խուսափելն է: Կաղապարն իրականացնելիս պետք է նվազագույնի հասցնել վերացական մեթոդների քանակը, որոնք պետք է իրականացվեն:
Կաղապարի ձևավորման ձևի իրականացում
Ստորև բերված է օրինակ, որը ցույց է տալիս կաղապարի ձևավորման օրինակի օգտագործումը: Այն բաղկացած է բազային դասից, որը կոչվում է Greeter
և EnglishGreeter
և FrenchGreeter
ենթադասերից:
Ողջույնների դասարան
Greeter
-ը վերացական դաս է: Այն պարունակում է կոնկրետ մեթոդ, որը կոչվում է greeting()
: Սա կաղապարի մեթոդն է:
Այն նաև պարունակում է երկու վերացական մեթոդ՝ doHello()
և doGoodbye()
: Greeter
-ի ենթադասերը պետք է իրականացնեն վերացական մեթոդները:
The EnglishGreeter Class
EnglishGreeter
դասը Greeter
-ի ենթադաս է: Այն իրականացնում է doHello()
և doGoodbye()
վերացական մեթոդները:
The FrenchGreeter Class
FrenchGreeter
դասը նույնպես Greeter
-ի ենթադաս է և իրականացնում է վերացական մեթոդները:
EnglishGreeter
-ը և FrenchGreeter
-ը նույնպես ժառանգել են greeting()
մեթոդը Greeter
-ից:
Ստեղծելով EnglishGreeter
-ի օրինակ և կանչելով greeting()
մեթոդը, վահանակում տպագրվում է հետևյալը.
Hello! Goodbye!
Ստեղծելով FrenchGreeter
-ի օրինակ և կանչելով greeting()
մեթոդը, վահանակում տպագրվում է հետևյալը.
Bonjour! Au revoir!
Չնայած doHello()
-ը և doGoodbye()
-ը կանչվում են որոշակի հերթականությամբ, մեթոդի մարմինները պարունակում են տարբեր բովանդակությունEnglishGreeter
և FrenchGreeter
-ում, ինչը հանգեցնում է տարբեր ելքերի:
Ստորև բերված է UML դիագրամ, որը ուրվագծում է Greeter-ի օրինակը.
Կաղապարի մեթոդը կոնկրետ մեթոդներով
Եկեք փոխենք Greeter
-ը՝ ներառելով կոնկրետ մեթոդները՝ waveHello()
և waveGoodbye()
: Երկու մեթոդներն էլ տպում են զմայլիկ:Greeting()
փոփոխվել է այս նոր մեթոդները կոչելու համար:
Քանի որ նոր մեթոդները կոնկրետ են, EnglishGreeter
և FrenchGreeter
դրանք իրականացնելու կարիք չունեն:
Ստեղծելով EnglishGreeter
-ի օրինակ և կանչելով greeting()
մեթոդը, վահանակում տպագրվում է հետևյալը.
🙌 Hello! 👋️ Goodbye!
Ստեղծելով FrenchGreeter
-ի օրինակ և կանչելով greeting()
մեթոդը, վահանակում տպվում է հետևյալը.
🙌 Bonjour! 👋️ Au revoir!
Էմոջիները համահունչ են երկու դասերում, և թողարկված տեքստի տատանումները դեռ պահպանվում են:
Ստորև բերված է UML դիագրամ, որը ուրվագծում է այս օրինակը.
Կեռիկի մեթոդների ավելացում
Կեռիկի մեթոդը կարող է սահմանվել որպես հիմնական դասի կամընտիր մեթոդ: Այն ապահովում է լռելյայն վարքագիծ, որն անհրաժեշտության դեպքում կարող են ընդլայնել ենթադասերը: Այն սովորաբար դատարկ է և լռելյայն ոչինչ չի անում:
Օրինակ, Greeter
դասը այժմ ունի ընտրովի մեթոդ, որը կոչվում է celebrate
, և այն դատարկ է:
Ենթադասերում celebrate()
-ը կարող է փոխարինվել մեթոդը խմբագրելու համար: Ստորև բերված օրինակում EnglishGreeter
-ը վերացնում է celebrate
մեթոդը՝ "WOO HOO!"
տպելու համար:
Ստեղծելով EnglishGreeter
-ի օրինակ և կանչելով greeting()
մեթոդը, վահանակում տպագրվում է հետևյալը.
🙌 Hello! WOO HOO! 👋️ Goodbye!
celebrate
մեթոդը չի վերացվել FrenchGreeter
ենթադասում: Արդյունքում, FrenchGreeter
-ի greeting
մեթոդը զանգահարելիս տպվածի մեջ փոփոխություններ չկան:
🙌 Bonjour! 👋️ Au revoir!
Ստորև բերված է UML դիագրամ՝ ուրվագծելով վերը նշված օրինակը.
Ռեսուրսներ:
Դիզայնի օրինաչափություններ. բազմակի օգտագործման օբյեկտի վրա հիմնված ծրագրաշարի տարրեր