Читаоци попут вас помажу у подршци МУО. Када обавите куповину користећи везе на нашем сајту, можда ћемо зарадити провизију за партнере.
Образац дизајна методе шаблона вам омогућава да дефинишете кораке алгоритма унутар једне методе класе. Ово вам омогућава да ограничите специфичне операције апликације на један метод.
Сваки корак алгоритма који метод шаблона дефинише је унутрашњи метод. Међутим, метода шаблона управља само имплементацијом неких својих унутрашњих метода. Подкласе обично имплементирају једну или више унутрашњих метода методе шаблона.
Поткласа може имплементирати апстрактну методу, али не може редефинисати алгоритам имплементиран коначном методом.
Како функционише шаблонски метод
Типичан образац методе шаблона ће имати следећу структуру:
коначнипразнинатемплатеМетход(){
абстрацтОператион1();
абстрацтОператион2();конкретнаОперација1();
конкретнаОперација2();
кука();
}
Прва важна ствар коју треба приметити је да је темплатеМетход() коначан, тако да ниједна подкласа не може заменити овај метод. Друга важна ствар коју треба напоменути су три врсте метода које шаблон методе користи: конкретна, апстрактна и кука.
Апстрактна класа у којој се налази шаблонски метод имплементира све његове конкретне методе, док конкретне подкласе имплементирају његове апстрактне методе. Метода куке обично не ради ништа по подразумеваној вредности, али подкласа има могућност да замени ове методе када је то потребно.
Имплементација шаблона методе шаблона у Јави
Шаблон методе делује као оквир за апликацију. Дакле, често ћете видети овај образац у софтверским оквирима који пружају нацрт за развој апликација.
На пример, можете повезати своју апликацију са једним од многих система база података. Кораци за повезивање и коришћење базе података прате сличан шаблон:
јавностиапстрактанкласаБаза података{
// метода шаблона
коначнипразнинадатабасеТемплате(){
// апстрактне методе
сетДБДривер();
сетЦредентиалс();// конкретна метода
цоннецт();// апстрактне методе
цреатеДБ();
сетДата();
реадДата();// методе куке
иф (усерВантсТоУпдате()) {
упдатеДата();
}иф (усерВантсТоДелете()) {
делетеДата();
}// конкретна метода
цлосеЦоннецтион();
}апстрактанпразнинасетДБДривер();
апстрактанпразнинасетЦредентиалс();
апстрактанпразнинацреатеДБ();
апстрактанпразнинасетДата();
апстрактанпразнинареадДата();
апстрактанпразнинаупдатеДата();
апстрактанпразнинаделетеДата();празнинаповезати(){
Систем.оут.принтлн("Повезивање са базом података...");
}празнинацлосеЦоннецтион(){
Систем.оут.принтлн("Уништавање везе са базом података...");
}боолеанусерВантсТоУпдате(){
повратаклажно;
}
боолеанусерВантсТоДелете(){
повратаклажно;
}
}
Овај пример класе базе података користи шаблон методе шаблона за креирање шаблона који можете да користите са било којом базом података. Да бисте користили базу података, ваша апликација ће морати да се повеже са њом, а затим да уништи везу након употребе. Ове активности су обично исте за све базе података. Стога, апстрактна класа Датабасе може имплементирати повезати() и цлосеЦоннецтион() методе.
Остале методе у методи шаблона ће се разликовати у зависности од типа базе података. На пример, МиСКЛ база података чува податке у табелама, док а МонгоДБ база података чува податке у колекцијама. Ако желите да користите а МиСКЛ база података у Јави, једноставно креирајте нову МиСКЛ класу која проширује класу Датабасе:
јавностикласаМиСКЛпротежеБаза података{
@Прегазити
празнинасетДБДривер(){
Систем.оут.принтлн("Избор МиСКЛ драјвера...");
}@Прегазити
празнинасетЦредентиалс(){
Систем.оут.принтлн("Подешавање акредитива за МиСКЛ базу података...");
}@Прегазити
празнинацреатеДБ(){
Систем.оут.принтлн("Прављење нове табеле...");
}@Прегазити
празнинасетДата(){
Систем.оут.принтлн("Убацивање података у базу података...");
}@Прегазити
празнинареадДата(){
Систем.оут.принтлн("Преузимање података из базе података...");
}@Прегазити
празнинаупдатеДата(){
Систем.оут.принтлн("Ажурирање података у бази података...");
}
@Прегазити
празнинаделетеДата(){
Систем.оут.принтлн("Брисање података из базе података...");
}
}
МиСКЛ класа имплементира све апстрактне методе класе Датабасе. Такође може надјачати неке конкретне методе. Међутим, не може додирнути база податакаТемплате() метод, који користи кључну реч финал.
јавностикласаГлавни{
јавностистатичнапразнинаглавни(Стринг[] аргументи){
База података миСКЛДБ = Нова МиСКЛ();
миСКЛДБ.датабасеТемплате();
}
}
Ова класа Маин креира нови објекат МиСКЛ базе података и користи метод шаблона да симулира како ће се апликација повезати са базом података. Покретање главног метода штампа следећи излаз на конзоли:
У излазу ћете приметити да апликација никада не позива упдатеДата() и делетеДата() методе. Због тога су методе куке важне. У СКЛ бази података, желећете да креирате нове табеле, убаците податке и прегледате своје податке. Међутим, можда не желите да ажурирате или избришете податке. Стога, методе закачивања дају подкласама могућност да контролишу ове критичне аспекте алгоритма.
@Прегазити
боолеанусерВантсТоУпдате(){
повратакистина;
}
Једноставним додавањем кода изнад у МиСКЛ класу, апликација сада ажурира податке у бази података. Ако поново покренете класу Маин, приказаће се следећи ажурирани излаз:
Као што видите, апликација сада ажурира податке у бази података.
Предности коришћења шаблона за дизајн методе шаблона
Главна предност шаблона методе је то што промовише поновну употребу софтвера. Овај образац дизајна такође подржава ефикасно програмирање. Поткласа треба само да имплементира методе које су јединствене за њен рад.
Поред тога, апликација која користи шаблон методе шаблона је сигурнија, пошто спољне класе не могу да промене њену структуру рада.