PHP Disinji Disinn - Pattern Osservatur
Stajt ġiet qari Kap Ewwel Disinji Disinn reċentement u li iddeċieda li jikteb xi wħud mill-mudelli bħala eżempji PHP għall-benefiċċju personali tiegħi. L-ewwel wieħed li stajt iddeċieda li kodiċi up huwa l- Pattern Osservatur . Id-definizzjoni formali ta 'l Pattern Osservatur huwa:
Il-mudell ta 'osservatur (subsett tal-asinkronu tippubblika / tabbona mudell ) huwa softwer mudell disinn li fih oġġett , imsejħa s-suġġett, iżomm lista ta 'dipendenti tiegħu, osservaturi imsejħa, u jgħarraf b'mod awtomatiku ta' kwalunkwe bidliet istat, normalment billi ċċempel wieħed mill tagħhom metodi . Dan huwa prinċipalment użat biex jimplimentaw sistemi distribwiti tqandil avveniment.
Kif is-sistemi jsiru aktar laxk flimkien jagħmlu ċert li, meta avveniment jiġri s-sistemi kollha li jeħtieġu għarfien ta 'dawn l-aġġornamenti huma infurmati. Per eżempju, blog post, wara l-iffrankar post għandna jistgħu jeħtieġu li jiġu aġġornati search engine (eż. Lucene), taġġorna sitemap tagħna, tikketti, utenti email sottoskritt, eċċ Il-mudell osservatur tippermetti lill-iżviluppaturi li jżidu s-semmiegħa addizzjonali mingħajr editjar oġġett osservabbli tagħhom . Billi tinjetta osservaturi (jiġifieri tiftix magna aġġornament osservatur, ġeneratur sitemap, eċċ) fis-suġġett (jiġifieri blog post editjar sistema) nistgħu jippermettu l-li twettaq l-aġġornamenti kollha meħtieġa mingħajr ebda tibdil.
Qabel il-mudell Osservatur ġiet identifikata l-trick soltu tkun li taġġorna l-oġġett osservabbli mal-linja addizzjonali ta 'kodiċi li jaġġorna s-sistema meħtieġa, u tneħħi l-linja tal-kodiċi kif meħtieġ. Dan ma jippermettix faċilment żieda-tneħħija u osservaturi.
L-aġġornamenti kollha jkunu soġġetti ta 'osservaturi tagħha permezz ta' metodu aġġornament. Dan il-metodu aġġornament jitlob metodu f'kull osservatur li huwa derivat mill-implimentazzjoni ta 'interface. Osservaturi tista 'żżid tneħħi lilhom infushom permezz ta' metodi fl-oġġett osservabbli.
Li bażikament it! Jien dejjem issib eżempju li jkun l-aħjar metodu ta 'tagħlim / fehim hekk hawn eżempju kodifikati up tiegħi ...
Pattern Osservatur fil PHP
Fl-eżempju tiegħi stajt ħolqot sistema aħbarijiet (NewsAggregator) li tibgħat l-aġġornamenti lett aħbarijiet li feeds aħbarijiet iżgħar. Hawnhekk il-sytem aħbarijiet jieħu l-post ta 'l-Suġġett, osservabbli, eċċ billi l-aħbarijiet għalf jieħu l-irwol ta' l-osservaturi jew semmiegħa.
Ladarba osservaturi tinbeda tista 'tehmeż u aqla ruħhom mill-suġġett kif jidhrilhom xieraq. Fl-eżempju tiegħi I ħolqu tlett osservaturi, dawn skennjati l-aħbarijiet li tintbagħat mill-suġġett u "jgħajtu" l-aħbarijiet jekk xieraq tagħha. L-osservaturi tlieta huma msemmija hawn taħt flimkien mat-termini huma iskan għal meta aħbarijiet jirċievu aħbarijiet:
- tennis "" "rugby", l-Isport Osservatur: "futbol",
- Aħbarijiet Osservatur: "politika", "finanzjament", "gvern"
- moda "" "ċelebrità", Gossip Osservatur: "mużikali",
Wara initalising-suġġett I żid il-osservaturi aħbarijiet u gossip u jibgħat aġġornament aħbarijiet. Wara dan l-osservatur isport huwa miżjud qabel l-aġġornamenti iktar aħbarijiet ikunu ntbagħtu. Fl-aħħar nett l-osservatur gossip titneħħa qabel headline aħbarijiet finali huwa mibgħut.
It-tliet klassijiet osservatur differenti timplimenta l-Osservatur interface, din tagħtihom interface ċara / metodu li permezz tiegħu se jirċievu aġġornamenti. Sakemm dawn jimplimentaw l-interface Osservatur dawn se jkunu jistgħu jagħtu ruħhom għall-Suġġett. Dan żżomm ukoll il-paradigma ipprogrammar ta '"programm għall-interfaces ma implimentazzjonijiet". Il-klassi NewsAggregator testendi l-Suġġett klassi astratt, li jagħtina l-tliet metodi pubbliku meħtieġa:
- updateObservers ()
- addObserver ()
- removeObserver ()
Il-kodiċi jistgħu jidhru running hawn, Osservatur Pattern fil-PHP Running , u l-kodiċi jistgħu jitniżżlu minn hawn, Osservatur Pattern fil PHP Kodiċi .
Osservatur Script
<? PHP / ** * Dan il-fajl fih l-osservaturi * @ * Awtur Lloyd Watkin * @ Peress 2009/12/23 * / Suġġett astratt klassi { astratt pubbliku funzjoni addObserver (Osservatur $ osservatur); astratt pubbliku funzjoni removeObserver (Osservatur $ osservatur); astratt updateObservers pubbliku funzjoni ($ newsHeadline); } / ** * Din hija l-klassi suġġett għall-eżempju * @ * Awtur Lloyd Watkin * @ Peress 2009/12/23 * / ArticleAggregator klassi testendi Suġġett { / ** * Stivi lista ta 'osservaturi tagħna * * @ Firxa var * / protetti $ _observerList = array (); / ** * Metodu biex iżżid osservatur * @ * Var Osservatur $ osservatur null * ritorn @ * / pubbliku funzjoni addObserver (Osservatur $ osservatur) { _observerList $ dan il-> [] = $ osservatur; } / ** * Metodu biex jitneħħew osservatur * @ * Var Osservatur $ osservatur Boolean * ritorn @ * / pubbliku funzjoni removeObserver (Osservatur $ osservatur) { foreach ($ dan il-> _observerList KIF $ ċavetta => $ ob) { jekk ($ ob == $ osservatur) { mitfi ($ dan il-> _observerList [$ ewlenin]); ritorn vera; } } ritorn foloz; } / ** * Metodu biex taġġorna l-osservaturi * @ * String var $ newsHeadline null * ritorn @ * / updateObservers pubbliku funzjoni ($ newsHeadline) { foreach ($ dan il-> _observerList KIF $ ob) { aġġornament $ ob-> ($ newsHeadline); } } / ** * Żid storja aħbarijiet ġodda * @ * String var $ istorja null * ritorn @ * / pubbliku funzjoni addNewsStory ($ istorja) { jekk (vojta ($ istorja) | |! is_string ($ istorja)) { tarmi InvalidArgumentException ġdid ("mistennija storja aħbarijiet!"); } $ Dan il-> updateObservers ($ istorja); } }
Suġġett / osservabbli Script
? <Php / ** * Dan il-fajl fih l * * suġġett @ awtur Lloyd Watkin * @ peress 2009/12/23 * / astratt klassi Suġġett {astratt pubbliku funzjoni addObserver (Osservatur $ osservatur); astratt pubbliku funzjoni removeObserver (Osservatur $ osservatur ); astratt updateObservers pubbliku funzjoni ($ newsHeadline);} / ** * Din hija l-klassi suġġett għall-eżempju * * @ awtur Lloyd Watkin * @ peress 2009/12/23 * / klassi ArticleAggregator testendi Suġġett {/ ** * Stivi lista ta 'tagħna * * osservaturi @ * firxa var / protetti $ _observerList = array (); / ** * Metodu li jżid osservatur * * @ var Osservatur * osservatur $ @ ritorn * null / pubbliċi funzjoni addObserver (Osservatur $ osservatur) {_observerList $ dan il-> [] = osservatur $;} / ** * Metodu biex jitneħħew osservatur * * @ var Osservatur * $ osservatur @ ritorn * Boolean / pubbliċi funzjoni removeObserver (Osservatur $ osservatur) {foreach ($ dan il-> _observerList KIF $ ċavetta => $ ob) {jekk ($ ob == $ osservatur) {mitfi (_observerList $ dan il-> [$ ewlenin]); ritorn vera;}} ritorn foloz;} / ** * Metodu biex taġġorna l-osservaturi * * @ var string $ * newsHeadline @ * null ritorn / updateObservers pubbliku funzjoni ($ newsHeadline) {foreach ($ dan il-> _observerList KIF $ ob) {aġġornament $ ob-> ($ newsHeadline);}} / ** * Żid ġdid aħbarijiet storja * * @ var string $ * istorja @ ritorn * null / pubbliċi funzjoni addNewsStory ($ istorja) {jekk (vojta ($ istorja) | |! is_string ($ istorja)) {tarmi InvalidArgumentException ġdid ('mistennija ta' aħbarijiet istorja ");!} $ dan il-> updateObservers ($ istorja);}} Kontrollur Script
<? PHP / ** * Osservatur Disinn Pattern Eżempju * @ * Awtur Lloyd Watkin * @ Peress 2009/12/23 http://www.evilprofessor.co.uk * rabta @ * / jinkludu "observers.php"; jinkludu "subject.php"; jekk (! vojta (_SERVER $ ["HTTP_USER_AGENT"])) { eku "";} / / X'inhuma nagħmlu? eku "Osservatur Eżempju Pattern fil-PHP". PHP_EOL; eku'================================'. PHP_EOL; / / Stabbilit ArticleAggregator = suġġett suġġett tagħna $ ġodda (); eku "- ArticleAggregator maħluqa". PHP_EOL; / / Żid xi osservaturi addObserver $ suġġett-> (ġdid NewsObserver ()); addObserver $ suġġett-> ($ gossiper = ġdid GossipObserver ()); eku "- Added NewsObverser & GossipObserver". PHP_EOL. PHP_EOL; / / ħoss, ħoss, ħoss ... Flash News! eku "Newsflash: player tar-rugby ċelebrità iħobb finanzi". PHP_EOL; eku'============================================== == ". PHP_EOL; $ suġġett-> addNewsStory ("player tar-rugby ċelebrità iħobb finanzjament"); eku PHP_EOL; eku "- SportObserver sab u trid li jingħaqdu mal-grupp!"; AddObserver $ suġġett-> (ġdid SportObserver ()); eku PHP_EOL . PHP_EOL; / / ħoss, ħoss, ħoss ... Flash News! eku "Newsflash: il-gvern tal-mensi darb'oħra!" . PHP_EOL; eku'======================================='. PHP_EOL; $ suġġett-> addNewsStory ("gvern tal-mensi darb'oħra!"); Eku PHP_EOL; / / ħoss, ħoss, ħoss ... Flash News! eku "Newsflash: moda u futbol jgħaqqdu". PHP_EOL; eku'======================================='. PHP_EOL; $ suġġett-> addNewsStory ("moda u futbol jgħaqqdu"); eku PHP_EOL; / / ħoss, ħoss, ħoss ... Flash News! eku "Newsflash: mużika u l-politika, dak li jmiss?" . PHP_EOL; eku'=========================================='. ("Mużika u l-politika, dak li jmiss?") $-Suġġett ta '> addNewsStory;; PHP_EOL eku PHP_EOL; / ** Gossipers * jikbru għajjien ta' aħbarijiet malajr ħafna u ikunu iddeċidew * biex tieqaf smigħ, minkejja l-aħbarijiet interessanti llum! * / Eku "- GossipObserver hija bored u tħalli l-grupp!" . PHP_EOL. PHP_EOL; $ suġġett-> removeObserver ($ gossiper); / / ħoss, ħoss, ħoss ... Aħbarijiet Flash - Aġġornament għall storja preċedenti! eku "NewsUpdate: moda u futbol jgħaqqdu jgħid". "Gvern". PHP_EOL; eku'============================================== == ". '========='. PHP_EOL; $ suġġett-> addNewsStory ("moda u futbol jgħaqqdu" "jgħid gvern".); Eku PHP_EOL; jekk (! Vojta (_SERVER $ ["HTTP_USER_AGENT"])) {eku "";
}



















































Hello,
L-ewwel, Ingliż tiegħi hija fqira ħafna, imbagħad
Tista 'tgħidli liema hija s-sistema fl-istampa?
Fedora 12?
X'inhi t-tema?
Hello,
Tista 'tgħidli liema hija s-sistema fl-istampa?
Fedora 12?
X'inhi t-tema?
Fedora 11 tagħha mal Kde applikati. tema Glasslooks nemmen.