Search the Community
Showing results for tags 'template metoda pattern'.
-
Template metoda pattern ( sablon ) in PHP Un 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 subclasa abstract 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 ConcreteClass class TemplateConTesto extends TemplateBase { function correctObject($bozza_object) { return str_replace(" ","---",$bozza_object); } function correctText($bozza_text) { return str_replace(" ","---",$bozza_text); } } // a doua ConcreteClass class 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.com Finished execution Reasumand 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 .