PHP Design Patterns - novērotājas Pattern
Esmu bijis lasījums vadītājs Pirmās Design Patterns nesen un ir nolēmušas rakstīt dažus no modeļiem, kā PHP piemēri par savu labumu. Pirmais, ko es esmu nolēmis kodu up ir Observer Pattern . Formāla definīcija novērotāju Pattern ir:
Novērotājs modelis (asinhronu apakškopa publicē / parakstīties modelis ) ir programmatūra, dizaina modeli , kurā objekts , ko sauc par tēmu, uztur sarakstu apgādājamiem, ko sauc par novērotājiem, un paziņo tos automātiski jebkuras valsts izmaiņām, parasti pa tālruni viens no viņu metodēm . Tas galvenokārt tiek izmantots, lai īstenotu izplata notikumu apstrādes sistēmas.
Kā kļūt par sistēmas, brīvi sapārotas, pārliecinoties, ka tad, kad notikums notiek visas sistēmas, kas prasa zināšanas šie atjauninājumi ir informēti. Piemēram, blog post, pēc glābšanas post mums var būt nepieciešams atjaunināt meklētājprogrammu (piemēram Lucene), atjaunināt mūsu vietnes karte, tags, e-pasts parakstītā lietotājiem uc novērotājs modelis ļauj izstrādātājiem, lai pievienotu papildu klausītāju nerediģējot to redzamiem objektu . Injicējot novērotāji (ti meklētājprogrammu atjauninājumu novērotāja sitemap ģenerators, utt) uz jautājumu (piemēram, blog post rediģēšanas sistēmas), mēs varam ļaut tam veikt visus nepieciešamos atjauninājumus bez izmaiņām.
Pirms novērotāja modelis tika konstatēta parasto triks būtu atjaunināt novērot objektu ar papildus koda rindu, lai atjauninātu nepieciešamo sistēmu un novēršot līniju kodu, cik nepieciešams. Tas nepieļauj vienkārši pievienojot un noņemot novērotāju.
Ievērojot atjaunina visu savu novērotāju, izmantojot metodi Atjaunināt. Šis atjauninājums metode prasa metodes katrs novērotājs, kas iegūts no īstenošanas interfeisu. Novērotāji var pievienot izņemt sevi, izmantojot metodes, kas novērojamas objektu.
Tas būtībā viss! Es vienmēr atrast piemēru ir labākais veids mācību / izprast, tāpēc šeit ir mana kodēts līdz pat piemēram ...
Novērotājs modelis PHP
Manā piemērā es esmu izveidojis ziņu sistēma (NewsAggregator), kas raida ziņas virsraksta atjauninājumi mazākiem ziņu plūsmas. Šeit ziņas sytem notiek vietā, Tēma, nosakāma, utt bet ziņu plūsmas uzņemties lomu novērotāju vai klausītājiem.
Kad sāk novērotāji var pievienot, un atdalās no kuriem pēc saviem ieskatiem. Manā piemērā es esmu izveidojis trīs novērotāji, tie skenēšanas virsrakstus izsūta šo tēmu un "kliegt" ziņas, ja tās nepieciešams. Trīs novērotāji tiek nosaukti turpmāk kopā ar noteikumiem tās skenēt, saņemot ziņu virsraksti:
- Sports Observer: "regbija", "futbola", "teniss"
- Ziņas Observer: "politika", "finansējumu", "valdība"
- Gossip Observer: "popularitātes", "mūzikas", "mode"
Pēc initalising kuriem es varu pievienot ziņu un tenkas novērotāji un izsūtīt ziņu atjauninājumu. Pēc šī sporta novērotājs ir pievienots pirms vairāk ziņu atjauninājumus izsūtīšanas. Visbeidzot tenkas novērotājs noņem pirms galīgā ziņas virsraksts ir izsūtīti.
Trīs dažādi novērotāji klasēs īstenot interfeisu Observer, tas dod viņiem skaidru interfeisu / metode, ar kuru palīdzību viņi saņems atjauninājumus. Ja tie ieviest novērotāju saskarne viņi varēs pievienot paši Tēma. Tas arī uztur ar programmēšanas paradigma "programmas saskarnes nav implementāciju." NewsAggregator klases paplašina abstraktu klasi Tēma, kas nodrošina mūs ar trim vajadzīgo publisko metodēm:
- updateObservers ()
- addObserver ()
- removeObserver ()
Kodu var redzēt darboties šeit Observer Pattern PHP Skriešana , un kodu var lejupielādēt no šejienes Observer Pattern PHP Code .
Observer Script
<? Php / ** * Šis fails satur novērotājiem * * @ Autora Lloyd Watkin * @ Kopš 2009/12/23 * / abstrakts klasē Tēma { abstraktā valsts funkciju addObserver (Observer $ novērotāju); abstraktā valsts funkciju removeObserver (Observer $ novērotāju); abstraktā valsts funkciju updateObservers ($ newsHeadline); } / ** * Par šo jautājumu klases piemēram * * @ Autora Lloyd Watkin * @ Kopš 2009/12/23 * / klases ArticleAggregator paplašina Tēma { / ** * Tilpnes saraksts ar mūsu novērotāju * * @ Var masīvs * / aizsargājamo $ _observerList = array (); / ** * Metode, lai pievienotu novērotāju * * @ Var Observer $ novērotāju * @ Atgriešanās spēkā neesošu * / valsts funkciju addObserver (Observer $ novērotāja) { $ This-> _observerList [] = $ novērotāja; } / ** * Metode, lai novērstu novērotāju * * @ Var Observer $ novērotāju * @ Atgriešanās Būla * / valsts funkciju removeObserver (Observer $ novērotāja) { foreach ($ this-> _observerList AS $ key => $ ob) { if ($ ob == $ novērotāja) { atiestatīta ($ this-> _observerList [$ taustiņu]); return true; } } atgriezties viltus; } / ** * Metode, lai atjauninātu novērotājiem * * @ Var string $ newsHeadline * @ Atgriešanās spēkā neesošu * / valsts funkciju updateObservers ($ newsHeadline) { foreach ($ this-> _observerList AS $ ob) { $ Ob-> update ($ newsHeadline); } } / ** * Pievienot jaunu ziņu stāsts * * @ Var string $ stāsts * @ Atgriešanās spēkā neesošu * / valsts funkciju addNewsStory ($ stāsts) { if (tukšas ($ stāsts) | |! is_string ($ stāsts)) { mest jaunu InvalidArgumentException ("Sagaidāmais jaunumi stāsts! '); } $ This-> updateObservers ($ stāsts); } }
Temats / novērojamiem Script
? <Php / ** * Šis fails ir ar mācību priekšmetu * * @ autora Lloyd Watkin * @ kopš 2009/12/23 * / abstraktā klase Temats {abstraktu valsts funkciju addObserver (Observer $ novērotāju); abstraktu valsts funkciju removeObserver (Observer $ novērotāju ) abstraktu valsts funkciju updateObservers ($ newsHeadline);} / ** * Par šo jautājumu klases piemēram, * * @ autora Lloyd Watkin * @ kopš 2009/12/23 * / klase ArticleAggregator paplašina Tēma {/ ** * Tilpnes Mūsu novērotāju * @ sarakstā var masīva * / aizsargāta $ _observerList = array (); / ** * metode, lai pievienotu novērotāju * * @ var Observer $ novērotāja * @ atgriešanos spēkā * / valsts funkciju addObserver (Observer $ novērotāja) {$ this-> _observerList [] = $ novērotāja statusā;} / ** * metode, lai novērstu novērotāju * * @ var Observer $ novērotāja * @ atgriešanos Būla * / valsts funkciju removeObserver (Observer $ novērotāju) {foreach ($ this-> _observerList AS $ key => $ ob) {if ($ ob == $ novērotāja) {atiestatīta ($ this-> _observerList [$ taustiņu]); return true;}} atgriezties viltus;} / ** * metode, lai atjauninātu novērotājiem * * @ var string $ newsHeadline * @ atgriezties neesošu * / valsts funkciju updateObservers ($ newsHeadline) {foreach ($ this-> _observerList AS $ ob) {$ ob-> update ($ newsHeadline);}} / ** * Add jaunu ziņu stāsts * * @ var string $ stāsts * @ atgriezties neesošu * / valsts funkciju addNewsStory ($ stāsts) {if (tukšas ($ stāsts) | |! is_string ($ stāsts)) {mest jaunu InvalidArgumentException ("Sagaidāmais ziņas stāsts ");!} $ this-> updateObservers ($ stāsts);}} Kontrolieris Script
<? Php / ** * Observer Design Pattern piemērs * * @ Autora Lloyd Watkin * @ Kopš 2009/12/23 * @ Saite http://www.evilprofessor.co.uk * / ietver "observers.php"; ietver "subject.php"; if (tukšas ($ _SERVER ['HTTP_USER_AGENT'])!) { echo '';} / / Ko mēs darām? echo "Observer Pattern Piemērs PHP". PHP_EOL; echo'================================'. PHP_EOL; / / Izveidot savu kuriem $ ievērojot = new ArticleAggregator (); echo "- ArticleAggregator radīts". PHP_EOL; / / Pievieno novērotāji $ priekšmeta> addObserver (jauns NewsObserver ()); $ priekšmeta> addObserver ($ gossiper = jauni GossipObserver ()); echo "- Pievienots NewsObverser un GossipObserver". PHP_EOL. PHP_EOL; / / Beep beep beep ... Jaunumi Flash! echo "Ziņas: popularitātes regbija spēlētājs mīl finansējumu". PHP_EOL; echo'============================================== == ". PHP_EOL; $ priekšmeta> addNewsStory ("slavenību regbija spēlētājs patīk finansējumu"), echo PHP_EOL, echo "- SportObserver ir noskaidrojis, un vēlas pievienoties grupai!", $ Priekšmeta> addObserver (jauns SportObserver ()); echo PHP_EOL . PHP_EOL; / / Beep beep beep ... Jaunumi Flash! echo "Ziņas: Valdība virtuves atkal!" . PHP_EOL; echo'======================================='. PHP_EOL; $ priekšmeta> addNewsStory ("valdība kopgaldu up vēlreiz! '); Echo PHP_EOL, / / Beep beep beep ... Jaunumi Flash! echo "Ziņas: modes un futbola apvienot." PHP_EOL; echo'======================================='. PHP_EOL; $ priekšmeta> addNewsStory ("modes un futbola apvienot '); echo PHP_EOL, / / Beep beep beep ... Jaunumi Flash! echo "Ziņas: mūzika un politiku, ko tālāk?" . PHP_EOL; echo'=========================================='. PHP_EOL; $ priekšmeta> addNewsStory ("mūzika un politiku, ko tālāk?"); Echo PHP_EOL, / ** * Gossipers apnīk ziņu ļoti ātri un ir nolēmušas * pārtraukt klausīties, neskatoties uz visiem interesanti jaunumi today! * / Echo "- GossipObserver ir garlaicīgi un atstāj grupu!" . PHP_EOL. PHP_EOL; $ priekšmeta> removeObserver ($ gossiper) / / Beep beep beep ... Ziņas Flash - Atjaunināt uz agrāku stāsts! echo "NewsUpdate: modes un futbola apvienot saka". "Valdība". PHP_EOL; echo'============================================== == ". '========='. PHP_EOL; $ priekšmeta> addNewsStory ("modes un futbola apvienot" "saka valdības."), Echo PHP_EOL, ja (! Tukšas ($ _SERVER ['HTTP_USER_AGENT'])) {echo '";
}



















































Sveiki,
Pirmkārt, Mana angļu valoda ir ļoti slikta, tad
Vai jūs varat man pateikt, kas ir sistēma, kas attēlu?
Fedora 12?
Kas ir tēma?
Sveiki,
Vai jūs varat man pateikt, kas ir sistēma, kas attēlu?
Fedora 12?
Kas ir tēma?
Tās Fedora 11 ar KDE piemērots. Glasslooks tēmu es uzskatu.