Jaké jsou návrhové vzory PHP?

PHP design Patterns

návrhové vzory PHP

Přehled: Všichni víme, jak důležité jsou návrhové vzory se staly neodmyslitelnou součástí dnešní vývoj aplikací, ať už je to jakákoliv technologie. V technologii PHP také konstrukce vzor se staly nedílnou součástí vývoje. Běžně používané návrhové vzory jsou také následoval na vývoj PHP světě.

V tomto článku budu mluvit o různých návrhových vzorů, které se používají v doméně PHP s některými ukázkové aplikace.

Úvod: Návrhové vzory poskytnout generickou opakovaně použitelných řešení společných problémů. Design vzor není konkrétní řešení, který může být převeden do zdrojového kódu nebo strojovém kódu, spíše se jedná o šablonu, která může být použita pro řešení problému v různých situacích. Návrhové vzory pomoci k rychlejšímu vývoji, protože šablony jsou osvědčené a z pozice developera, pouze je nutné provádění. Návrhové vzory, aby nejen vývoj software rychlejší, ale také zapouzdřit velké myšlenky v jednodušším způsobem. V PHP světě, Následujících pět návrhové vzory jsou používány obecně -

  • The Factory Pattern
  • Singleton
  • The Observer Pattern
  • Linie velení Pattern
  • Strategie Pattern

The Factory Pattern:

Továrna vzor poskytuje řešení, které umožňuje volné spojení, Takto nám pomáhá zbavit těsné spojení problému. Jako developer všichni jsme si dobře vědomi změn, kterým čelí, zatímco my udržovat kód, který je pevně spojen. Factory vzor poskytuje třídu, která má některé metody vytvářet objekty pro nás v běhu. Namísto vytváření instance přímo používáme továrnu k vytvoření objekty pro nás. Thus, máme-li změnit typ objektu vytvořeného, jen musíme změnit továrnu. Následující kód je příkladem realizace továrny v PHP -

Listing 1: Implementace ukázkové továrny v PHP

[Code]

<?php

Zákaznické rozhraní

{

funkce getName();

}

class Customer implementuje zákazníkovi

{

public function __construct ( $id ) { }

public function getName ()

{

return “PHP - Factory Pattern”;

}

}

třída CustomerFactory

{

public static funkci Vytvořit ( $id )

{

vrátit nový zákazník ( $id );

}

}

$Uo = CustomerFactory::Vytvořit ( 1 );

Ozvěna ( $uo->getName().”\n” );

?>

[/Code]

Ve výše uvedeném příkladu máme rozhraní s názvem, Zákazník, který má definici předmětu. Toto rozhraní je implementována ve třídě zákazníka. Továrna třída CustomerFactory vytvoří objekty zákazníků. Budeme-li spustit tento kód na příkazové řádce, který má PHP interpretor dostaneme výsledek jako -

[Code]

% php factorySample.php

PHP - Factory Pattern

%

[/Code]

Singleton:

Jak název napovídá, Singleton umožňuje pouze jedna instance, které mají být vytvořeny. Zatímco vývoji aplikace, narazíme na mnoho situací, kdy potřebujeme mít pouze jednu instanci objektu. Tato instance mohou být sdíleny různými procesy. E.g. A Připojení databáze objektů. Vždy je doporučeno vytvořit a zničit objekt připojení k databázi, aby se zabránilo režii otevírání a zavírání spojení. Následující kód ukazuje, jak implementovat Singleton v PHP -

Listing 2: Singleton implementace v PHP

[Code]

<?php

require_once(“DB.php”);

třída DatabaseConnection

{

public static funkci getDBO ()

{

static $ db = null;

jestliže ( $db == null )

$db = new DatabaseConnection();

return $ db;

}

private $ _handle = null;

private function __construct()

{

$DSN = 'mysql://vykořenit:heslo @ dbhost / dbinstance ";

$tento->_handle =& DB::Připojit( $dsn, řada() );

}

public function rukojeť()

{

vrátit $ this->_zacházet s;

}

}

tisk( “zvládnout = “.DatabaseConnection::získat()->zacházet s().”\n” );

tisk( “zvládnout = “.DatabaseConnection::získat()->zacházet s().”\n” );

?>

[/Code]

Výše uvedený kód ukazuje, jak se dostat připojení db pomocí singleton přístupu. Soukromý konstruktor v této třídě zajišťuje, že nelze volat z vnějšku třídy. Statická metoda - getDBO () je volána ze třídy volajícího získat objekt připojení DB.

The Observer Pattern:

Pozorovatel Vzor je velmi přímočará. Objekt je vyrobena pozorovatelné přidáním způsob, který umožňuje další objekt, pozorovatel se zaregistrovat. V případě, že pozorovatelný objekt dostane ke změně, odešle zprávu na objekty, které jsou registrovány jako pozorovatelé. Následující kód ukazuje, jak implementovat vzor Observer -

Listing 3: Implementace Observer v PHP

[Code]

<?php

rozhraní Observer

{

funkce onChanged( $odesílatel, $args );

}

rozhraní Pozorovatelny

{

funkce addObserver( $pozorovatel );

}

třída CustomerList implementuje Pozorovatelny

{

private $ _observers = array();

public function addCustomer( $jméno )

{

pro každého( $tento->_observers dolarů OBS )

$obs->onChanged( $tento, $jméno );

}

public function addObserver( $pozorovatel )

{

$tento->_observers []= $ Pozorovatel;

}

}

třída CustomerListLogger implementuje Observer

{

public function onChanged( $odesílatel, $args )

{

ozvěna( “'$ args’ Zákazník byl přidán do seznamu n” );

}

}

$ul = new UserList();

$UL>addObserver( nová CustomerListLogger() );

$UL>addCustomer( “Zvedák” );

?>

[/Code]

Výše uvedený kód definuje dvě rozhraní a jejich příslušné implementační třídy.

Linie velení Pattern:

Linie velení vzor je jiný vzor, ​​který je založen na konceptu volným propojením. Zde každý psovod rozhodne, zda je možné zpracovat požadavek, nebo ne. Jestliže ano, požadavek je řešen a proces se zastaví. Pokud ne, Žádost je pak předán k dalšímu psovoda a tak dále. Následující kód je implementace Vzorek tohoto vzoru -

Listing 4: Ukázkový kód, kterým se provádí linii velení Pattern -

[Code]

<?php

Příkaz interface

{

funkce OnCommand( $jméno, $args );

}

třída CommandChain

{

private $ _commands = array();

 

public function addCommand( $cmd )

{

$tento->_commands []= $ Cmd;

}

public function RunCommand( $jméno, $args )

{

pro každého( $tento->_commands jako $ cmd )

{

jestliže ( $cmd->OnCommand( $jméno, $args ) )

return;

}

}

}

třída CustCommand implementuje Command

{

public function OnCommand( $jméno, $args )

{

jestliže ( $jméno != 'AddCustomer’ ) return false;

ozvěna( “To je CustomerCommand manipulaci 'addCustomer' n” );

return true;

}

}

třída MailCommand implementuje Command

{

public function OnCommand( $jméno, $args )

{

jestliže ( $jméno != 'Pošta’ ) return false;

ozvěna( “To je MailCommand manipulaci s "poštou" n” );

return true;

}

}

$cc = new CommandChain();

$CC>addCommand( nová CustCommand() );

$CC>addCommand( nová MailCommand() );

$CC>RunCommand( "AddCustomer", nula );

$CC>RunCommand( 'poštovní zásilka', nula );

?>

[/Code]

Strategie Pattern:

Strategie vzor je založena na algoritmu. Komplexní algoritmy jsou extrahovány z tříd tak, že je možné snadno vyměnit. Strategie vzor je založen na plug and play teorie. Běžným provádění strategie vzor je chceme-li změnit způsob, jakým jsou stránky zařadil na vyhledávací stránku s výsledky. Implementace Vzorek je uvedeno níže -

Listing 5: Implementace Ukázka strategie vzoru

[Code]

<?php

strategie rozhraní

{

funkce filtru( $záznam );

}

třída FindAfter implementuje strategii

{

private $ _name;

public function __construct( $jméno )

{

$tento->_name = $ name;

}

public function filtr( $záznam )

{

return strcmp( $tento->_jméno, $záznam ) <= 0;

}

}

třída FindRandom implementuje strategii

{

public function filtr( $záznam )

{

return rand( 0, 1 ) >= 0.5;

}

}

třída CustomerList

{

private $ _list = array();

public function __construct( $jména )

{

jestliže ( $jména != null )

{

pro každého( $Jména jako $ name )

{

$tento->_seznam []= $ Name;

}

}

}

public function add( $jméno )

{

$tento->_seznam []= $ Name;

}

public function find( $filtr )

{

$recs = array();

pro každého( $tento->_list as $ uživatel )

{

jestliže ( $filtr->filtr( $user ) )

$recs []= Uživatel $;

}

vrátit $ recs;

}

}

$ul = new CustomerList( řada( “a Joe”, “ric Anderson”, “Nick Paul”, “Megan Pit” ) );

$f1 = $ UL>najít( nová FindAfter( “J” ) );

print_r( $f1 );

$f2 = $ UL>najít( New FindRandom());

print_r( $f2 );

?>

[/Code]

Here, třída CustomerList je obal, který má řadu některých názvů. Tato třída implementuje způsob zjistit, který má některou z několika strategií pro výběr podmnožiny těch jmen. Tyto strategie jsou definovány rozhraní strategie, který má dvě implementace: První z nich vybere zákazníkům náhodně, zatímco druhá vybere všechny názvy po zadané jméno.

Summary: Takže návrhové vzory jsou některé z velkých myšlenek, které mohou být použity v libovolném programovacím jazyce, včetně PHP. Mluvili jsme o nejběžnější návrhové vzory používané v aplikacích PHP.
Pojďme uzavřít naši diskusi s těmito kulkami -

  • Návrhové vzory jsou používány v každém technologie, která pomůže vývojářům následovat společný přístup k opakovanému použití řešení pro běžné problémy.
  • Design Patterns nejsou konkrétní, ale jsou koncepční.
  • Stejně jako ostatní jazyky, PHP také používá společné návrhové vzory, z nichž některé jsou popsány výše.

 

============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share