R0cc0 Posted March 1, 2013 Report Posted March 1, 2013 Template metoda pattern ( sablon ) in PHPUn template metoda pattern ( sablon ) este un model de proiectare (Behavioral Design Pattern) , difuzat in Object Oriented Programming , care ne lasa sa stabilim structura unui algoritm de clasa , inteles ca si procedura pentru solutionarea problemelor recurente , facand ca , clasele secundare ( derivate sau subclase ) sa poate efectua arbitrar partiale implementari si personalizari pentru redefinire anumitor comportamente , totul fara a necesita rescrierea codului sursa .Fnctionarea " Template methon Pattern In cazul specific al limbajului PHP , va fii in internul Template methon Pattern o clasa abstacta , adica o clasa svilupata partial in care metodele pot fii implementate prin clasele secundare , carora li se vor asocia definirea metodei prin care a fost corelat un algoritm , si metodele implicate de algoritm in sine . In programarea care se refera la biecte , frecvent trebuie sa gestionam diverse sub-clase care provin dintr-o clasa principala , o conditie , o fectiune in sine nu este negativa, dar poate sa ridice inconvenientul de a fii nevoie sa punem in aplicare structuri asemanatoare .O posibila solutie a aceste probleme este , de a redefinii sursa facand in asa fel ca orice suprapunere sa fie mutate din multitdinea de clase secundare , in singura clasa ( superclass ) .Cel mai bine este sa vedem o simpla tehnica de sesizare , daca credeti de exemplu ca trebuie sa gestionati o aplicatie mai complexa , care cuprinde mai multe parti inter-conectate intre ele , dar care trebuiesc sa pevada modificari care nu implica intreaga structura , o modalitate de intervent ar fii aceea sa va asigurati ca sub-casele pot actiona pe parti din algoritm dintr-o clasa abstracta . " Template Methon Pattern " ne perimite acest lucru , adica descrierea structurii de baza a unui algoritm intr-o operatie lasand clasele secunde libere sa urmeze eventualele implementari .Operatiuni primitive : Concepute pentru a redefinii clasele derivate .Hookc : Metode optionale redefinibile sau eredetabile in forma originala .Metode care nu pot fii inlocuite / modificate deoarece apartin superclasei .Un simplu exemlpu de utilizare este acela care prevede creearea unei AbstractClass care contine metoda template asociata algoritmului pentru definirea continutului structural dintr-un fisier .Definita abstractului si implementarea in Sub-Clase Un exemplu practic de utilizare al " Template Method Pattern " , sa presupunem o aplicatie in care superclasa , numita " TemplateBase , are integrata metoda : (ViewFullMessage()) , care invoca metodele : extractObject() si extractText() .<?php// definitia superclasei ca si subclasaabstract class TemplateBase {// metooda si structurarea algortmului de clasa public final function vewfullMessage($message) { $bozza_Object = $message->extractObject(); $bozza_text = $message->extractText(); $object_final = $this->correctObject($bozza_Object); $testo_definitivo = $this->correctText($bozza_text); if (NULL == $text_final) { $message_displayed = $object_final; } else { $message_dysplayed = $object_final." .:::. ".$text_final; } return $message_dysplayed; }// functie pentru overriding abstract function correctObject($bozza_object);// hook function correctText($bozza_text) { return NULL; }}/* ereditare subclase*/// first ConcreteClassclass TemplateConTesto extends TemplateBase { function correctObject($bozza_object) { return str_replace(" ","---",$bozza_object); } function correctText($bozza_text) { return str_replace(" ","---",$bozza_text); }}// a doua ConcreteClassclass TemplateJustObject extends TemplateBase { function CorrectObject($bozza_object) { return str_replace(" ","~",$bozza_object); }}class MessageFull { private $bozza_text; private $bozza_object; function __construct($bozza_object_for_write, $bozza_text_for_write) { $this->object = $bozza_text_for_write; $this->text = $bozza_object_for_write; } function extractText() {return $this->object;} function extractObject() {return $this->text;} function extractTextAndObect() { return $this->extractObject() . " .:::. " . $this->extractText(); }}write_message("Exemplu practic de utilizare a Template Method Pattern.");$message_complete = new MessageComplete("hello rst.com","Hello from R0cc0.");$template_with_testo = new TemplateConTesto(); $template_just_object = new TemplateJustObject();write_message("Firs execution: show message and object:");write_message($template_with_text->viewfullMessage($message_complete));write_message("a doua executie : show just object:");write_messageo($template_just_object->viewfullMessage($message_complete));write_message("Finished execution.");function write_message($output) { echo $output."<br/>\r\n"; }?>Executia sursei ar trebuii sa genereze un output de genul : Exemplu practic de utilizare a Template Method Pattern. First execution : Show message and object:Hello---rst.com .:::. Hello---from---R0cc0 .Second execution : show just object:Hello~rst.comFinished executionReasumand tot, in aplicatie vine introdusa o metoda template, care nu va face altceva decat sa defineasca structura algoritmului , pentru care a fost creata superclasa .Scuzati greselile gramaticale . 1 Quote