Jump to content
R0cc0

Tutorial Template metoda pattern ( sablon ) in PHP

Recommended Posts

Posted

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

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