Jump to content
R0cc0

Tutorial Template metoda pattern ( sablon ) in PHP

Recommended Posts

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 . :)

  • Downvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...