PHP Design Pattern - tagamasid Pattern
Ako ay pagbabasa Head Unang Design Pattern kamakailan at may nagpasya na isulat ang ilan sa mga pattern ng PHP mga halimbawa para sa aking sariling mga benepisyo. Ang unang isa na ako ay nagpasya na code up ay ang tagamasid Pattern . Ang mga pormal na mga kahulugan ng mga tagamasid Pattern ay:
Ang mga tagamasid pattern (isang subset ng mga asynchronous publish / subscribe pattern ) ay isang software na disenyo pattern na kung saan ang isang bagay , na tinatawag na ang paksa, nagpapanatili ng isang listahan ng kanyang mga dependents, na tinatawag na tagamasid, at aabisuhan ang mga ito awtomatikong ng anumang mga pagbabago ng estado, karaniwan ay sa pamamagitan ng pagtawag isa sa kanilang mga pamamaraan . higit sa lahat Ito ay ginagamit upang ipatupad ipinamamahagi systems kaganapan sa paghawak.
Bilang mga sistema ng mas maging maluwag kaisa siguraduhin na kapag ang isang kaganapan ang mangyayari sa lahat ng mga sistema na nangangailangan ng kaalaman ng mga update na ito ay alam. Halimbawa, ang isang blog post, pagkatapos ng pag-save ng isang post na maaaring kailanganin naming i-update ang isang search engine (hal. Lucene), i-update ang aming sitemap, tag, email subscribe users, atbp Ang pattern tagamasid nagbibigay-daan sa mga developer upang magdagdag ng karagdagang mga tagapakinig nang walang pag-edit ng kanilang mga kapansin-pansin na bagay . Sa pamamagitan ng injecting tagamasid (ibig sabihin ng isang search engine update tagamasid, ang isang sitemap dyeneretor, atbp) sa isang paksa (ibig sabihin ng blog post na sistema sa pag-edit) Maaari naming payagan ang mga ito upang maisagawa ang lahat ng kinakailangang mga update nang walang anumang pagbabago.
Bago ang mga tagamasid na pattern ay kinilala ang mga dati bilis ng kamay ay upang i-update ang kapansin-pansin bagay na may isang karagdagang linya ng code na i-update ang mga kinakailangan na sistema, at alisin ang mga linya ng code kung kailangan. Ito ay hindi nagpapahintulot ng para sa madaling pagdagdag at pagtanggal sa mga tagamasid.
Ang paksa ng mga update sa lahat ng mga tagamasid nito sa pamamagitan ng isang paraan ng update. Update na ito paraan ng tawag sa isang paraan sa bawat tagamasid kung saan ay nagmula mula sa pagpapatupad ng isang interface. Tagamasid ay maaaring magdagdag ng isang tanggalin ang kanilang sarili sa pamamagitan ng mga pamamaraan sa mga kapansin-pansin na bagay.
Iyan na talaga ito! Ako laging mahanap ang isang halimbawa na ang pinakamahusay na paraan ng pag-aaral / unawa kaya dito ang aking naka-code up halimbawa ...
Tagamasid Pattern sa PHP
Sa aking halimbawa ko na nilikha ng isang sistema ng balita (NewsAggregator) na nagpapadala ng mga update balita headline sa mas maliit na mga feed ng balita. Narito ang mga balita sytem tumatagal ang lugar ng mga Paksa, kapuna-puna, atbp na kung saan ang mga feed ng balita kunin ang papel na ginagampanan ng mga tagamasid o tagapakinig.
Kapag initialised tagamasid ay maaaring maglakip at baklasin ang kanilang sarili mula sa mga paksa tulad ng nakikita sila magkasya. Sa aking halimbawa ako ay may nilikha tatlong mga tagamasid, ang mga ito i-scan ang mga headline na ipinadala sa labas sa pamamagitan ng paksa at 'sigaw' ang balita kung ang kanyang pagaaral. Ang tatlong mga tagamasid ay pinangalanan sa ibaba kasama ng mga tuntunin sila i-scan para sa kapag tumatanggap ng mga ulo ng balita:
- Sport tagamasid: 'rugby', 'football', 'tennis'
- Tagamasid News: 'pulitika', 'pananalapi', 'pamahalaan'
- Tsismis tagamasid: 'celebrity', 'musika', 'fashion'
Pagkatapos initalising ang paksa idagdag ako sa mga tagamasid ng balita at tsismis at magpadala ng isang balita update. Matapos na ito ang sport tagamasid ay idinagdag bago ang karagdagang mga balita update ay ipinadala out. Panghuli ang tsismis tagamasid ay tinanggal bago ng isang pangwakas na headline ng balita ay ipinadala out.
Ang tatlong iba't ibang klase tagamasid ipatupad ang interface tagamasid, ito ay magbibigay sa kanila ng isang malinaw na interface / paraan sa pamamagitan ng kung saan sila ay makatanggap ng mga update. Ibinigay nila ipatupad ang tagamasid interface sila ay able sa ilakip ang mga sarili sa Subject. Ito magtatala din sa programming paradaym ng 'na programa sa mga interface hindi pagpapatupad'. Ang NewsAggregator class nagpalawak sa abstract Subject klase, na nagbibigay sa amin ang mga kinakailangang tatlong pampublikong paraan:
- updateObservers ()
- addObserver ()
- removeObserver ()
Ang code ay makikita na tumatakbo dito, tagamasid Pattern sa PHP Tumatakbo , at ang code ay maaaring ma-download mula sa dito, tagamasid Pattern sa PHP Code .
Tagamasid Script
<? Php / ** * Ang file na ito ay naglalaman ng mga tagamasid * * @ Akda Lloyd Watkin * @ Since 2009/12/23 * / abstract class Paksa { abstract pampublikong function addObserver (tagamasid $ tagamasid); abstract pampublikong function removeObserver (tagamasid $ tagamasid); abstract pampublikong function updateObservers ($ newsHeadline); } / ** * Ito ang paksa ng klase para sa mga halimbawa * * @ Akda Lloyd Watkin * @ Since 2009/12/23 * / class ArticleAggregator nagpalawak Paksa { / ** * Humahawak ng isang listahan ng aming mga tagamasid * * @ Var array * / protektado $ _observerList = array (); / ** * Paraan upang magdagdag ng isang tagamasid * * @ Tagamasid var $ tagamasid * @ Bumalik walang bisa * / pampublikong function addObserver (tagamasid $ tagamasid) { $ Na ito-> _observerList [] = $ tagamasid; } / ** * Paraan upang tanggalin ang isang tagamasid * * @ Tagamasid var $ tagamasid * @ Bumalik boolean * / pampublikong function removeObserver (tagamasid $ tagamasid) { foreach ($ na ito-> _observerList AS $ key => $ ob) { kung ($ ob == $ tagamasid) { unset ($ na ito-> _observerList [$ key]); bumalik true; } } bumalik false; } / ** * Paraan upang i-update ang mga tagamasid * * @ Var $ string newsHeadline * @ Bumalik walang bisa * / pampublikong function updateObservers ($ newsHeadline) { foreach ($ na ito-> _observerList AS $ ob) { $ Ob-> update ($ newsHeadline); } } / ** * Magdagdag ng isang bagong kuwento ng balita * * @ Var $ string kuwento * @ Bumalik walang bisa * / pampublikong function addNewsStory ($ kuwento) { kung (walang laman ($ story) | |! is_string ($ kuwento)) { ihagis bagong InvalidArgumentException ('Inaasahang isang balita!'); } $ Na ito-> updateObservers ($ kuwento); } }
Subject / kapansin-pansin Script
? <Php / ** * Ang file na ito ay naglalaman ng paksa * * @ akda Lloyd Watkin * @ since 2009/12/23 * / abstract class Subject abstract {pampublikong function addObserver (tagamasid $ tagamasid); abstract pampublikong function removeObserver (tagamasid $ tagamasid ); abstract pampublikong function updateObservers ($ newsHeadline);} / ** * * * Ito ang paksa ng klase para sa mga halimbawa * * @ akda Lloyd Watkin * @ since 2009/12/23 * / class ArticleAggregator nagpalawak Subject {/ ** * humahawak ng isang listahan ng aming mga tagamasid * * @ var array * / $ protektado _observerList = array (); / ** * Paraan upang magdagdag ng isang tagamasid * * @ var tagamasid $ tagamasid * @ return void * / pampublikong function addObserver (tagamasid $ tagamasid) {$ ito-> _observerList [] = $ tagamasid;} / * ** Paraan upang tanggalin ang isang tagamasid * * @ tagamasid var $ tagamasid * @ bumalik boolean * / pampublikong function removeObserver (tagamasid $ tagamasid) {foreach ($ na ito-> _observerList AS $ key => $ ob) {if ($ ob == $ tagamasid) {unset ($ na ito-> _observerList [$ key]); bumalik true;}} return false;} / * ** Paraan upang i-update ang mga tagamasid * * * * * * @ var $ string newsHeadline * @ return void * / pampublikong function updateObservers ($ newsHeadline) {foreach ($ na ito-> _observerList AS $ ob) {$ ob-> update ($ newsHeadline);}} / ** * Add isang bagong balita * * @ var $ string kuwento * @ return void * / pampublikong function addNewsStory ($ kuwento) {if (walang laman ($ story) | |! is_string ($ kuwento)) {ihagis bagong InvalidArgumentException ('Ang inaasahang balita ng isang kuwento ');!} $ ito-> updateObservers ($ kuwento);}} Controller Script
<? Php / ** * Tagamasid Design Pattern Halimbawa * * @ Akda Lloyd Watkin * @ Since 2009/12/23 * @ Link http://www.evilprofessor.co.uk * / isama 'observers.php'; isama 'subject.php'; kung (! walang laman ($ _SERVER ['HTTP_USER_AGENT'])) { echo ''; } / / Ano ang mga namin ginagawa? echo 'tagamasid Pattern Halimbawa sa PHP'. PHP_EOL; echo'================================'. PHP_EOL; / / I-set up ang aming paksa $ Subject = bagong ArticleAggregator (); echo '- ArticleAggregator nilikha'. PHP_EOL; / / Magdagdag ng ilang mga tagamasid $ Paksa-> addObserver (bagong NewsObserver ()); $ Paksa-> addObserver ($ dalahira = bagong GossipObserver ()); echo '- Added NewsObverser & GossipObserver'. PHP_EOL. PHP_EOL; / / Pugak, pugak, pugak ... News Flash! echo 'NewsFlash: player celebrity rugby loves finance'. PHP_EOL; echo'================================================ '. PHP_EOL; $ Paksa-> addNewsStory ('player celebrity rugby loves finance'); echo PHP_EOL; echo '- SportObserver ay natagpuan sa labas at gustong sumali sa group!'; $ Paksa-> addObserver (bagong SportObserver ()); echo PHP_EOL. PHP_EOL; / / Pugak, pugak, pugak ... News Flash! echo 'NewsFlash: pamahalaan messes up ulit!' . PHP_EOL; echo'======================================='. PHP_EOL; $ Paksa-> addNewsStory ('pamahalaan messes up ulit!'); echo PHP_EOL; / / Pugak, pugak, pugak ... News Flash! echo 'NewsFlash: fashion at football pagsamahin'. PHP_EOL; echo'======================================='. PHP_EOL; $ Paksa-> addNewsStory ('fashion at football pagsamahin ang'); echo PHP_EOL; / / Pugak, pugak, pugak ... News Flash! echo 'NewsFlash: musika at politika, ano ang susunod?' . PHP_EOL; echo'=========================================='. PHP_EOL; ('Ng musika at politika, ano ang susunod?') $ Paksa-> addNewsStory; echo PHP_EOL; / ** * Gossipers paglaki pagod ng mga balita ay mabilis at may nagpasya * Na huminto sa pakikinig, sa kabila ng lahat ng mga kagiliw-giliw na balita ngayon! * / echo '- GossipObserver ay nainis at dahon ng grupo!' . PHP_EOL. PHP_EOL; $ Paksa-> removeObserver ($ tsismoso); / / Pugak, pugak, pugak ... News Flash - Update sa isang mas maaga kuwento! echo 'NewsUpdate: fashion at football pagsamahin says'. 'Pamahalaan'. PHP_EOL; echo'================================================ '. '========='. PHP_EOL; $ Paksa-> addNewsStory ('fashion at football pagsamahin'. 'Sabi ng gobyerno'); echo PHP_EOL; kung (! walang laman ($ _SERVER ['HTTP_USER_AGENT'])) { echo '';
}



















































Hello,
Una, ang aking ingles ay napaka dukha, at pagkatapos ay
Maaari mong sabihin sa akin kung ano ang sistema sa larawan?
Fedora 12?
Ano ang tema?
Hello,
Maaari mong sabihin sa akin kung ano ang sistema sa larawan?
Fedora 12?
Ano ang tema?
Its Fedora 11 sa KDE apply na. Glasslooks tema sa tingin ko.