Ո՞րն է կաղապարի մեթոդի ձևավորման ձևանմուշը:

🎉 Դուք կարող եք գտնել նոր և թարմացված գրառումներ 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 ենթադասում: Արդյունքում, FrenchGreetergreeting մեթոդը զանգահարելիս տպվածի մեջ փոփոխություններ չկան:

🙌
Bonjour!
👋️
Au revoir!

Ստորև բերված է UML դիագրամ՝ ուրվագծելով վերը նշված օրինակը.

Ռեսուրսներ:

Դիզայնի օրինաչափություններ. բազմակի օգտագործման օբյեկտի վրա հիմնված ծրագրաշարի տարրեր