Якія патэрны праектавання PHP?

PHP design Patterns

дызайн Шаблоны PHP

Агляд: Усе мы ведаем, наколькі важныя дызайн мадэлі сталі неад'емнай часткай у сучаснай распрацоўкі прыкладанняў, няхай гэта будзе любая тэхналогія. У PHP тэхналогіі таксама шаблон дызайну сталі неад'емнай часткай развіцця. Commonly used design patterns are also followed in the PHP development world.

У гэтым артыкуле я буду казаць аб розных шаблонаў праектавання, якія выкарыстоўваюцца ў дамене PHP з некаторымі прыкладамі прыкладанняў.

Увядзенне: Дызайн мадэлі забяспечваюць агульны шматразовай рашэнне агульных праблем. Дызайн шаблон з'яўляецца не канкрэтнае рашэнне, якое можа быць ператвораны ў зыходны код або машынны код, а гэта шаблон, які можа быць выкарыстаны для вырашэння праблемы ў розных сітуацыях. Шаблоны праектавання дапамагаюць больш хуткага развіцця, як шаблоны і правераныя з пункту распрацоўніка, толькі патрабуецца выкананне. Дызайн мадэлі не толькі робяць распрацоўку праграмнага забеспячэння хутчэй, але і інкапсуляваць вялікія ідэі больш простым спосабам. У PHP свеце, наступныя пяць шаблонаў праектавання выкарыстоўваюцца ў цэлым -

  • Factory Pattern
  • Singleton Pattern
  • назіральнік Pattern
  • ланцуг каманда
  • шаблон стратэгіі

Factory Pattern:

Шаблон завод забяспечвае рашэнне, якое дазваляе слабосвязанности, такім чынам, дапамагае нам пазбавіцца ад жорсткай задачы спалучэння. Як распрацоўшчык, мы ўсе добра дасведчаныя пра змены, з якімі сутыкаюцца ў той час як мы падтрымліваем код, які цесна звязаны. Фабрыка шаблон прадастаўляе клас, які мае некаторыя метады для стварэння аб'ектаў для нас падчас выканання. Замест таго каб ствараць асобнік непасрэдна мы выкарыстоўваем фабрыку для стварэння аб'ектаў для нас. Thus, калі мы павінны змяніць тып аб'екта, створанага, нам проста трэба змяніць завод. Наступны код з'яўляецца прыкладам рэалізацыі фабрыкі ў PHP -

Listing 1: Прыклад рэалізацыі фабрыкі ў PHP

[Code]

<?PHP

інтэрфейс карыстальніка

{

функцыя GetName();

}

Клас Заказчык ажыццяўляе Заказчык

{

грамадская функцыя __construct ( $ID ) { }

грамадская функцыя GetName ()

{

return “PHP - Factory Pattern”;

}

}

клас CustomerFactory

{

грамадская статычная функцыя Стварыць ( $ID )

{

вярнуць новага кліента ( $ID );

}

}

$Іо = CustomerFactory::стварыць ( 1 );

рэха ( $uo->GetName().”\п” );

?>

[/Code]

У прыведзеным вышэй прыкладзе мы маем інтэрфейс, які называецца, Кліент, які мае вызначэнне аб'екта. Гэты інтэрфейс рэалізуецца ў класе Кліента. Завод клас CustomerFactory стварае аб'екты па працы з кліентамі. Калі выканаць гэты код у камандным радку, які мае PHP перакладчыцай мы атрымаем вынік, як -

[Code]

% PHP factorySample.php

PHP - Factory Pattern

%

[/Code]

Singleton Pattern:

Як вынікае з назвы, одноэлементный шаблон дазваляе толькі адзін асобнік павінен быць створаны. Пры распрацоўцы прыкладанні, мы сутыкаемся шмат сітуацый, калі нам трэба мець толькі адзін асобнік аб'екта. Гэты асобнік можа сумесна выкарыстоўвацца рознымі працэсамі. E.g. а аб'екты падлучэння да базы дадзеных. Заўсёды рэкамендуецца стварыць і знішчыць аб'ект падлучэння да базы дадзеных для таго, каб пазбегнуць накладных выдаткаў адкрыцця і закрыцця злучэння. Наступны код паказвае, як рэалізаваць Singleton ў PHP -

Listing 2: Singleton рэалізацыя ў PHP

[Code]

<?PHP

require_once(“DB.php”);

клас DatabaseConnection

{

грамадская статычная функцыя getDBO ()

{

статычныя $ DB = NULL;

калі ( $дб == NULL )

$DB = новы DatabaseConnection();

вяртанне $ дб;

}

прыватны $ _handle = NULL;

прыватная функцыя __construct()

{

$DSN = 'MySQL://корань:password@dbhost/dbinstance’;

$этом->_handle =& база дадзеных::падключаць( $DSN, масіў() );

}

грамадская функцыя ручкі()

{

вярнуць $ этом->_handle;

}

}

друк( “ручка = “.DatabaseConnection::атрымаць()->ручка().”\п” );

друк( “ручка = “.DatabaseConnection::атрымаць()->ручка().”\п” );

?>

[/Code]

Прыведзены вышэй код паказвае, як атрымаць злучэнне з базай дадзеных, выкарыстоўваючы одноэлементный падыход. Прыватны канструктар гэтага класа гарантуе, што яна не можа быць выкліканая з-за межаў класа. Статычны метад - getDBO () выклікаецца з класа выклікае абанента, каб атрымаць аб'ект падлучэння да БД.

назіральнік Pattern:

Шаблон назіральнік вельмі прама наперад. Аб'ект зроблены назіраны пры даданні метад, які дазваляе іншым аб'ектам, назіральнік прайсці рэгістрацыю. Калі назіраны аб'ект атрымлівае зменены, ён пасылае паведамленне на аб'екты, якія зарэгістраваныя ў якасці назіральнікаў. Наступны код паказвае, як рэалізаваць шаблон Observer -

Listing 3: Рэалізацыя назіральніка шаблон у PHP

[Code]

<?PHP

інтэрфейс назіральніка

{

функцыя OnChanged( $адпраўнік, $аргументы );

}

інтэрфейс Observable

{

функцыя addObserver( $назіральнік );

}

Клас CustomerList рэалізуе Observable

{

прыватныя $ _observers = масіў();

грамадская функцыя addCustomer( $імя )

{

для кожнага( $этом->_observers як $ набл )

$obs->OnChanged( $this, $імя );

}

грамадская функцыя addObserver( $назіральнік )

{

$этом->_observers []= $ Назіральнік;

}

}

Клас CustomerListLogger рэалізуе назіральніка

{

грамадская функцыя OnChanged( $адпраўнік, $аргументы )

{

рэха( “'$ Агдз’ Кліент быў дададзены ў спіс п” );

}

}

$уль = новы UserList();

$уль>addObserver( новы CustomerListLogger() );

$уль>addCustomer( “джэк” );

?>

[/Code]

Прыведзены вышэй код вызначае два інтэрфейсу і іх адпаведныя класы рэалізацыі.

ланцуг каманда:

Ланцужок каманда яшчэ адзін шаблон, які заснаваны на канцэпцыі слабой сувязі. Тут кожны апрацоўшчык вырашае, ці можа ён апрацаваць запыт або няма. Калі гэта можа, запыт апрацоўваецца, і працэс спыняецца. калі не, запыт затым перадаецца наступнаму апрацоўшчык і гэтак далей. Наступны код з'яўляецца прыкладам рэалізацыі гэтай мадэлі -

Listing 4: Прыклад кода рэалізацыі комсостава Pattern -

[Code]

<?PHP

інтэрфейс каманднага

{

функцыя OnCommand( $імя, $аргументы );

}

клас CommandChain

{

прыватныя $ _commands = масіў();

 

грамадская функцыя addCommand( $CMD )

{

$этом->_commands []= $ CMD;

}

грамадская функцыя RunCommand( $імя, $аргументы )

{

для кожнага( $этом->_commands як $ CMD )

{

калі ( $Cmd->OnCommand( $імя, $аргументы ) )

return;

}

}

}

Клас CustCommand рэалізуе каманду

{

грамадская функцыя OnCommand( $імя, $аргументы )

{

калі ( $імя != 'AddCustomer’ ) вяртанне ілжывым;

рэха( “Гэта CustomerCommand зварот 'addCustomer' п” );

вяртае ісціну;

}

}

Клас MailCommand рэалізуе каманду

{

грамадская функцыя OnCommand( $імя, $аргументы )

{

калі ( $імя != 'Пошта’ ) вяртанне ілжывым;

рэха( “Гэта MailCommand апрацоўка 'пошты' п” );

вяртае ісціну;

}

}

$сс = новы CommandChain();

$cc->addCommand( новы CustCommand() );

$cc->addCommand( новы MailCommand() );

$cc->RunCommand( 'AddCustomer', нулявы );

$cc->RunCommand( "Электронная пошта", нулявы );

?>

[/Code]

шаблон стратэгіі:

Ўзор стратэгія заснавана на алгарытмах. Складаныя алгарытмы здабываюцца з класаў, так што яны могуць быць лёгка заменены. шаблон Стратэгія заснавана на тэорыі падключыў і гуляй. Агульная рэалізацыя стратэгіі шаблон, калі мы хочам, каб змяніць спосаб, у якім старонкі ранжыру ў старонкі вынікаў пошуку. Прыклад рэалізацыі паказаны ніжэй -

Listing 5: Прыклад рэалізацыі шаблону Strategy

[Code]

<?PHP

інтэрфейс стратэгіі

{

функцыя фільтра( $запіс );

}

Клас FindAfter рэалізуе стратэгію

{

прыватны $ _name;

грамадская функцыя __construct( $імя )

{

$этом->_name = $ імя;

}

грамадская функцыя фільтра( $запіс )

{

вяртанне зЬгстр( $этом->_name, $запіс ) <= 0;

}

}

Клас FindRandom рэалізуе стратэгію

{

грамадская функцыя фільтра( $запіс )

{

вяртанне рэнд( 0, 1 ) >= 0.5;

}

}

клас CustomerList

{

прыватны $ _list = масіў();

грамадская функцыя __construct( $імёнаў )

{

калі ( $імёнаў != NULL )

{

для кожнага( $імёны, як $ імя )

{

$этом->_list []= Імя $;

}

}

}

грамадскія функцыі дадаць( $імя )

{

$этом->_list []= Імя $;

}

грамадская функцыя знаходка( $фільтр )

{

$РВК = масіў();

для кожнага( $этом->_list ў $ карыстальніка )

{

калі ( $фильтр->фільтр( $user ) )

$РВК []= $ Карыстальнік;

}

вярнуць $ РВК;

}

}

$уль = новы CustomerList( масіў( “і Джо”, “Ric Андэрсан”, “Нік Пол”, “Меган Pit” ) );

$f1 = $ уль>знаходзіць( новы FindAfter( “J” ) );

print_r( $f1 );

$f2 = $ уль>знаходзіць( новы FindRandom());

print_r( $f2 );

?>

[/Code]

Here, клас CustomerList з'яўляецца абалонкай, які мае масіў некаторых імёнаў. Гэты клас рэалізуе метад пошуку, які прымае адну з некалькіх стратэгій выбару падмноства гэтых імёнаў. Стратэгіі вызначаюцца інтэрфейсам стратэгіі, які мае дзве рэалізацыі: Першы з іх выбірае кліентаў выпадковым чынам, а іншая выбірае ўсе імёны пасля названага імя.

Summary: Так шаблоны праектавання некаторыя з вялікіх ідэй, якія могуць быць выкарыстаны ў любой мове праграмавання, уключаючы PHP. Мы разгледзелі найбольш распаўсюджаныя шаблоны праектавання, якія выкарыстоўваюцца ў PHP-прыкладаннях.
Давайце скончым наша абмеркаванне з наступнымі куль -

  • Дызайн мадэлі выкарыстоўваюцца ў кожнай тэхналогіі, каб дапамагчы распрацоўнікам прытрымлівацца агульны падыход шматразовага выкарыстання рашэнні для агульных праблем.
  • Шаблоны ня пэўныя, але з'яўляюцца канцэптуальнымі.
  • Як і іншыя мовы, PHP таксама выкарыстоўвае агульныя шаблоны праектавання, некаторыя з якіх апісаны вышэй.

 

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

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share