Titluri recente
You are here: Home / Tehnologie / Web / Php-Mysql / Php design pattern: FACTORY

Php design pattern: FACTORY

Voi incepe prin a va oferi o scurta definitie a paternului FACTORY. “O clasa care creaza obiecte”. Pe cat de simpla, probabil pe atat de ambigua aceasta definitie. De ce e nevoie de o functionalitate distincta care creaza obiectele? Aparent inutila, dar, dupa o usoara analiza a catorva dintre experientele dvs. anterioare sunt sigur ca  deja i-ati gasit o utilitate. Sunt sigur ca:

  • Pana acum cel putin o data ati create mai multe instante de obiecte oferind ca argument constructorului un numar mare de variabile, si de multe ori, identice.
  • Pana acum, cel putin o data ati modificat structura de fisiere a aplicatiei si a fost nevoie sa modificati in intreaga aplicatie locatiile incluse.

Stiti deci ce insemna sa modifici toate fisierele aplicatiei pentru a folosi un obiect modificat intr-un fel sau altul… Metoda factory, rezolva cu succes ‘erorile’ provocate de evenimentele mentionate mai sus.

<?php
interface IUser
{
	function getEmail();
}

class User implements IUser
{
	public function __construct( $id ) { }

	public function getEmail()
	{
		return "some.email@some.domain";
	}
}
class UserFactory
{
	public static function Create( $id )
	{
		return new User( $id );
	}
}

$user = UserFactory::Create( 1 );
echo( $user->getEmail()."\n" );
?>

Codul de mai sus reprezinta o implementare a paternului factory. Interfata IUser obila clasa sa descrie obligatoriu procedura getEmail(). Clasa User care impelenemteaza interfata IUser ofera functionalitatea necesara pentru a obtine adresa de email a unui user. Clasa UserFactory folosind metoda Create() returneaza un obiect (in cazul de fata de tip User) cu care putem sa aflam o adresa de email. Sa presupunem acum ca… procesul s-a complicat, si vom folosi alta clasa care va gestiona Utilizatorii.

Tot ce trebuie sa facem este sa modificam functia Create din clasa UserFactory astfel:

public static function Create( $id )
{
	return new User( $id );
}

cu

public static function Create( $id )
{
	include_once ('noul_fisier.php')
	return new New_User_Class( $id );
}

 

Astfel, in cadrul intregii aplicatii folosirea

$user = UserFactory::Create( 1 );

va crea un obiect de tip New_User_Class (exact ceea ce ne doream), in timp ce apelul

$user = new User(1);

va returna un obiect de tip User (care nu va beneficia de noua functionalitate).

V-am prezentat mai sus un exemplu care ilustreaza unul dintre avantajele folosirii paternului factory.

About Mihai Adam

Leave a Reply

Your email address will not be published. Required fields are marked *

*


nine − = 2

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>