PHP Design Patterns - stebėtojų planas
Aš svarstymo Head First Design Patterns neseniai ir nusprendė parašyti keletą iš šablonų, PHP pavyzdžių savo naudai. Pirmasis, kad aš nusprendė kodas padidinimas stebimųjų planas . Oficialaus apibrėžimas stebėtojų Planas yra toks:
Stebėtojas modelis (asinchroninis pogrupyje skelbia / užsiprenumeruoti modelis ) yra programinės įrangos projektavimo modelis , kai objektas , vadinamas objektas, teigia stebėtojai, sąrašą savo išlaikytiniams, vadinama, ir praneša apie juos automatiškai bet būsena pasikeičia, dažniausiai telefonu vienas iš jų metodai . Jis daugiausia naudojamas įgyvendinti paskirstyta renginys tvarkymo sistemas.
Kaip sistemos tampa silpnai susijusios įsitikinti, kad kai įvykis atsitinka visų sistemų, kurios reikalauja žinių apie šiuos atnaujinimus yra informuojami. Pavyzdžiui, tinklaraščio įrašą, po taupymo paštu mums gali reikėti atnaujinti paieškos (pvz. Lucene), atnaujinti mūsų Sitemap, žymių, el pasirašytojo vartotojams ir pan stebėtojas modelis leidžia kūrėjams pridėti papildomų klausytojų be redagavimo jų stebimus objektą . Įpurškiant stebėtojai (ty paieškos atnaujinti stebėtojas, Sitemap Generator ir tt) į temą (ty dienoraštyje redagavimo sistema), mes galime leisti jai atlikti visus būtinus atnaujinimus be jokių pakeitimų.
Prieš stebimųjų modelis buvo nustatytas įprastas triukas būtų atnaujinti stebimų objektas su papildoma eilutė kodo atnaujinti reikalinga sistema, ir pašalinti kodo eilutę, kaip reikalaujama. Tai neleidžia lengvai pridėti ir pašalinti stebėtojai.
Tema atnaujinimai visus savo stebėtojus per naujinimo būdą. Šis naujinimas metodas reikalauja iš kiekvieno stebėtojo metodą, kuris yra kilęs iš įgyvendinimo sąsaja. Stebėtojai gali pridėti pašalinti save per metodais stebėti objektą.
Tai iš esmės ji! Aš visada rasti, pavyzdžiui, kad geriausias būdas mokymosi / supratimą, kad čia mano koduojami iki pavyzdys ...
Stebėtojas diagramos PHP
Mano pavyzdyje aš sukūriau naujienos sistemai (NewsAggregator), kuris siunčia naujienos antraštę atnaujinimai mažesnių naujienas. Čia naujienos abroad laikosi naujienos vietoj Tema, pastebimas, ir tt kadangi pašarai imtis Klausytojai vaidmenį stebėtojai arba.
Kai pradedamas stebėtojai gali pridėti ir nuimti sau nuo temos, kaip joms atrodo tinkama. Mano pavyzdyje aš sukūriau trys stebėtojai, jie nuskaityti antraštės išsiųstą klausimu ir "šaukti" naujienos, jei jo reikia. Trys stebėtojai toliau nurodyta kartu su terminais, jie ieškotų, kai gauna naujienas:
- Sportas stebėtojai: "regbio", "futbolas", "tenisas"
- Naujienos stebėtojai: "politika", "finansai", "valdžios sektoriaus"
- Gandai stebėtojai: "įžymybė", "muzika", "mados"
Po initalising tema aš įdėti naujienas ir kūmutė stebėtojus ir siųsti naujienas atnaujinti. Po šio sporto stebėtojas pridėta prieš daugiau žinučių atnaujinimai siunčiami. Galiausiai kūmutė stebėtojas pašalinami prieš galutinį naujienos antraštė išsiųsti.
Trijų skirtingų stebėtojų klasių įgyvendinti sąsaja stebėtojai, tai suteikia jiems aiški sąsaja / metodas, per kurią jie gaus atnaujinimus. Jei jie įgyvendina stebėtojų sąsaja jie galės prisitvirtinti prie Objektas. Tai taip pat veda su programavimo paradigma "programos sąsajos ne diegimas". NewsAggregator klasė apima abstrakčios klasės Objektas, kuris suteikia mums tris reikalaujama visuomenei būdai:
- updateObservers ()
- addObserver ()
- removeObserver ()
Kodas gali būti vertinamas veikia čia, stebėtojų Pattern PHP Veikia ir kodas gali būti parsisiųsti iš čia, stebėtojų diagramos PHP kodas .
Stebėtojas scenarijus
<? Php / ** * Šis failas yra stebėtojai * * @ Author Lloyd Watkin * @ Nes 2009/12/23 * / abstrakčios klasės Objektas { abstrakčių visuomenės funkcija addObserver (stebėtojų $ stebėtojas); abstrakčių visuomenės funkcija removeObserver (stebėtojų $ stebėtojas); abstrakčių visuomenės funkcija updateObservers ($ newsHeadline); } / ** * Tai taikoma klasės pavyzdys * * @ Author Lloyd Watkin * @ Nes 2009/12/23 * / klasė ArticleAggregator tęsiasi Tema { / ** * Turi mūsų stebėtojų sąrašą * * @ Var masyvas * / Saugomų $ _observerList = array (); / ** * Metodas pridėti stebėtojas * * @ Var stebimųjų $ stebėtojas * @ Return negaliojančiu * / viešoji funkcija addObserver (stebėtojų $ stebėtoja) { $ This-> _observerList [] = $ stebėtojas; } / ** * Metodas pašalinti stebėtojas * * @ Var stebimųjų $ stebėtojas * @ Return boolean * / viešoji funkcija removeObserver (stebėtojų $ stebėtoja) { foreach ($ this-> _observerList kaip $ key => $ ob) { if ($ ob == $ stebėtojas) { išjungimo ($ this-> _observerList [$ raktas]); return true; } } return false; } / ** * Metodas atnaujinti stebėtojų * * @ Var string $ newsHeadline * @ Return negaliojančiu * / viešoji funkcija updateObservers ($ newsHeadline) { foreach ($ this-> _observerList kaip $ ob) { $ Ob-> atnaujinimas ($ newsHeadline); } } / ** * Pridėti naują naujienų * * @ Var string $ istorija * @ Return negaliojančiu * / viešoji funkcija addNewsStory ($ istorija) { jei (tuščia ($ istorija) | |! is_string ($ istorija)) { išryškėti naujos InvalidArgumentException ("Laukiami naujienų! '); } $ This-> updateObservers ($ istorija); } }
Tema / stebimų scenarijus
? <Php / ** * Šis failas yra tema * * @ author Lloyd Watkin * @ nes 2009/12/23 * / abstrakčios klasės Tema {abstrakčių visuomenės funkcija addObserver (stebėtojų $ stebėtojas); abstrakčių visuomenės funkcija removeObserver (stebėtojų $ stebėtojas ); abstrakčių visuomenės funkcija updateObservers ($ newsHeadline);} / ** * Čia yra taikomos klasės pavyzdys * * @ author Lloyd Watkin * @ nes 2009/12/23 * / klasė ArticleAggregator tęsiasi Tema {/ ** * Talpina mūsų stebėtojai * @ sąrašą var masyvas * / saugomos $ _observerList = array (); / ** * metodas pridėti stebėtojas * @ var stebimųjų $ stebėtojas * @ return negaliojančiu * / public function addObserver (stebėtojų $ stebėtoja) {$ this-> _observerList [] = $ stebėtojas;} / ** * metodas pašalinti stebėtojas * @ var stebimųjų $ stebėtojas * @ return Būlio * / public function removeObserver (stebėtojų $ stebėtojas) {foreach ($ this-> _observerList kaip $ key => $ ob) {if ($ ob == $ stebėtojas) {išjungimo ($ this-> _observerList [$ raktas]); return true;}} return false;} / ** * metodas atnaujinti stebėtojų * * @ var string $ newsHeadline * @ return negaliojančiu * / public function updateObservers ($ newsHeadline) {foreach ($ this-> _observerList kaip $ ob) {$ ob-> atnaujinimas ($ newsHeadline);}} / ** * Pridėti naujas naujienų * @ var string $ istorija * @ return negaliojančiu * / public function addNewsStory ($ istorija) {jei (tuščia ($ istorija) | |! is_string ($ istorija)) {mesti naujas InvalidArgumentException ("Laukiami naujienos istorija ");!} $ this-> updateObservers ($ istorija);}} Scenarijų valdiklis
<? Php / ** * Stebimųjų Design Pattern pavyzdys * * @ Author Lloyd Watkin * @ Nes 2009/12/23 * @ Nuorodą http://www.evilprofessor.co.uk * / apima "observers.php"; apima "subject.php"; if (! tuščia ($ _SERVER ['HTTP_USER_AGENT'])) { echo '";} / / Ką mes darome? echo "stebėtojų planas Pavyzdys PHP". PHP_EOL; echo'================================'. PHP_EOL; / / Nustatykite mūsų tema $ subject = nauji ArticleAggregator (); echo "- ArticleAggregator sukūrė". PHP_EOL; / / Pridėti kai kurie stebėtojai $ tema-> addObserver (naujas NewsObserver ()); $ tema-> addObserver ($ gossiper = nauji GossipObserver ()); echo "- Pridėta NewsObverser & GossipObserver". PHP_EOL. PHP_EOL; / / Beep, Beep, Beep ... Naujienos Flash! echo 'Newsflash: sławna regbio žaidėjas myli finansavimo ". PHP_EOL; echo'============================================== == '. PHP_EOL; $ tema-> addNewsStory ("Celebrity regbio žaidėjas myli finansuoti"); echo PHP_EOL; aidas "- SportObserver sužinojo, ir nori prisijungti prie grupės!"; $ Tema-> addObserver (naujas SportObserver ()); echo PHP_EOL . PHP_EOL; / / Beep, Beep, Beep ... Naujienos Flash! echo 'Newsflash: vyriausybės sujaukia dar kartą! " . PHP_EOL; echo'======================================='. PHP_EOL; $ tema-> addNewsStory ("Vyriausybės sujaukia dar kartą! '); Echo PHP_EOL; / / Beep, Beep, Beep ... Naujienos Flash! echo 'Newsflash: mados ir futbolo sujungti ". PHP_EOL; echo'======================================='. PHP_EOL; $ tema-> addNewsStory ("mados ir futbolo sujungti"); echo PHP_EOL; / / Beep, Beep, Beep ... Naujienos Flash! echo 'Newsflash: muzika ir politika, o kas toliau? " . PHP_EOL; echo'=========================================='. PHP_EOL; $ tema-> addNewsStory ("muzika ir politika, o kas toliau?"); Echo PHP_EOL; / ** * Gossipers pavargs naujienų labai greitai ir nusprendė * nustoti klausytis, nepaisant visų įdomių naujienų šiandien! * / Echo "- GossipObserver yra nuobodu ir palieka grupę!" . PHP_EOL. PHP_EOL; $ tema-> removeObserver ($ gossiper) / / Beep, Beep, Beep ... Naujienos Flash - Update anksčiau istoriją! echo 'NewsUpdate: mados ir futbolo derinti sako ". "Vyriausybė". PHP_EOL; echo'============================================== == '. '========='. PHP_EOL; $ tema-> addNewsStory ("mados ir futbolo derinti", "sako valdžia".); Echo PHP_EOL; if (! Tuščia ($ _SERVER ['HTTP_USER_AGENT'])) {echo '";
}



















































Sveiki,
Pirma, mano anglų labai blogai, tada
Ar galite man papasakoti, kas paveikslėlyje sistemą?
Fedora 12?
Kas yra tema?
Sveiki,
Ar galite man papasakoti, kas paveikslėlyje sistemą?
Fedora 12?
Kas yra tema?
Jo Fedora 11 su KDE taikomos. Glasslooks tema manau.