PHP Disinji Disinn - Pattern Osservatur
Stajt ġiet qari Disinji Kap tad-Disinn Ewwel reċentement u ikunu iddeċidew li jikteb xi wħud mill-mudelli bħala eżempji PHP għall-benefiċċju personali tiegħi. L-ewwel waħda li jien iddeċidejt li kodiċi up huwa l- Pattern Osservatur . Id-definizzjoni formali tal-Pattern Osservatur huwa:
Il-mudell osservatur (subsett ta 'l-mhux sinkroniku jippubblika / tabbona mudell ) huwa softwer mudell tad-disinn li fihom oġġett , imsejjaħ is-suġġett, iżomm lista ta 'dipendenti tagħha, imsejħa osservaturi, u tinnotifika b'mod awtomatiku ta' kwalunkwe bidliet istat, normalment billi ċċempel wieħed minn metodi . Dan huwa prinċipalment użat biex jimplimentaw is-sistemi distribwiti tqandil avveniment.
Bħala sistemi isiru aktar b'mod laxk flimkien jagħmlu ċert li meta l-avveniment jiġri l-sistemi li jeħtieġu għarfien ta 'dawn l-aġġornamenti huma infurmati. Per eżempju, blog post, wara l-iffrankar ta 'wara għandna jistgħu jeħtieġu li jiġu aġġornati search engine (eż. Lucene), taġġorna sitemap tagħna, tikketti, l-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 l-osservaturi (jiġifieri search engine osservatur aġġornament, ġeneratur sitemap, eċċ) fis-suġġett (blog jiġifieri wara l-editjar sistema) nistgħu jippermettu l-li jwettaq 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 ma 'linja addizzjonali ta' kodiċi li jaġġorna s-sistema meħtieġa, u tneħħi l-linja tal-kodiċi kif meħtieġ. Din ma tippermettix faċilment żieda-tneħħija u l-osservaturi.
L-aġġornamenti kollha jkunu soġġetti ta 'osservaturi tagħha permezz ta' metodu ta 'aġġornament. Dan il-metodu aġġornament jitlob metodu f'kull osservatur li hija derivata mill-implimentazzjoni ta 'interface. Osservaturi jistgħu jżidu tneħħi lilhom infushom permezz ta 'metodi fil-oġġett osservabbli.
Dik hija bażikament it! Jien dejjem issib eżempju li tkun l-aħjar metodu ta 'tagħlim / fehim hekk hawnhekk eżempju kodifikati tiegħi sa ...
Pattern osservatur fil PHP
Fl-eżempju tiegħi stajt ħolqot sistema aħbarijiet (NewsAggregator) li tibgħat l-aġġornamenti headline aħbarijiet aħbarijiet għalf 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ħdu r-rwol ta' l-osservaturi jew Semmiegħa.
Osservaturi darba jinbeda jistgħu jehmżu u jinqalgħu mis-suġġett kif jarawhom xierqa. Fl-eżempju tiegħi I ħolqu tliet 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 li scan għal meta jirċievu aħbarijiet ewlenin:
- Sport Osservatur: "rugby", "futbol", "tennis"
- Osservatur Aħbarijiet: "politika", "finanzjament", "gvern"
- Osservatur gossip: "ċelebrità", "mużika", "moda"
Wara initalising-suġġett I żid l-aħbarijiet u l-osservaturi 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 mibgħut.
It-tliet klassijiet differenti osservatur timplimenta l-Osservatur-interface, dan jagħtihom metodu ċar interface / li permezz tagħhom huma se jirċievu aġġornamenti. Sakemm jimplimentaw l-interface Osservatur dawn se jkunu jistgħu jagħtu ruħhom għall-suġġett. Dan żżomm ukoll mal-mudell ta 'programmazzjoni ta' programm għall-interfaces ma implimentazzjonijiet ". Il-klassi NewsAggregator testendi l-Suġġett klassi astratt, li jagħtina l-tliet metodi pubbliċi huma mitluba:
- updateObservers ()
- addObserver ()
- removeObserver ()
Il-kodiċi jista 'jidher hawn taħdem, Pattern Osservatur fil-PHP Tmexxija , u l-kodiċi jista 'jitniżżel minn hawn, Pattern Osservatur fil-Kodiċi PHP .
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 * * @ Var firxa * / protetti $ _observerList = array (); / ** * Metodu biex iżżid osservatur * * @ Var Osservatur $ osservatur * Null ritorn @ * / pubbliku funzjoni addObserver (Osservatur $ osservatur) { $ Dan il-> _observerList [] = $ osservatur; } / ** * Metodu biex jitneħħew osservatur * * @ Var Osservatur $ osservatur * Boolean ritorn @ * / pubbliku funzjoni removeObserver (Osservatur $ osservatur) { foreach ($ dan il-> _observerList KIF $ ewlenin => $ ob) { jekk ($ ob == $ osservatur) { mitfi ($ dan il-> _observerList [$ ewlenin]); ritorn vera; } } ritorn foloz; } / ** * Metodu biex taġġorna l-osservaturi * * @ Sekwenza var $ newsHeadline * Null ritorn @ * / updateObservers pubbliku funzjoni ($ newsHeadline) { foreach ($ dan il-> _observerList KIF $ ob) { $ Ob> aġġornament ($ newsHeadline); } } / ** * Żid storja aħbarijiet ġdida * * @ Sekwenza var $ istorja * Null ritorn @ * / pubbliku funzjoni addNewsStory ($ istorja) { jekk (vojta ($ storja) | |! is_string ($ storja)) { tarmi InvalidArgumentException ġdid ("mistennija storja aħbarijiet!"); } $ Dan il-> updateObservers ($ storja); } }
Suġġett / osservabbli Script
<? PHP / ** * Dan il-fajl fih is-suġġett * * @ 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 * * @ Var firxa * / protetti $ _observerList = array (); / ** * Metodu biex iżżid osservatur * * @ Var Osservatur $ osservatur * Null ritorn @ * / pubbliku funzjoni addObserver (Osservatur $ osservatur) { $ Dan il-> _observerList [] = $ osservatur; } / ** * Metodu biex jitneħħew osservatur * * @ Var Osservatur $ osservatur * Boolean ritorn @ * / pubbliku funzjoni removeObserver (Osservatur $ osservatur) { foreach ($ dan il-> _observerList KIF $ ewlenin => $ ob) { jekk ($ ob == $ osservatur) { mitfi ($ dan il-> _observerList [$ ewlenin]); ritorn vera; } } ritorn foloz; } / ** * Metodu biex taġġorna l-osservaturi * * @ Sekwenza var $ newsHeadline * Null ritorn @ * / updateObservers pubbliku funzjoni ($ newsHeadline) { foreach ($ dan il-> _observerList KIF $ ob) { $ Ob> aġġornament ($ newsHeadline); } } / ** * Żid storja aħbarijiet ġdida * * @ Sekwenza var $ istorja * Null ritorn @ * / pubbliku funzjoni addNewsStory ($ istorja) { jekk (vojta ($ storja) | |! is_string ($ storja)) { tarmi InvalidArgumentException ġdid ("mistennija storja aħbarijiet!"); } $ Dan il-> updateObservers ($ storja); } }
Kontrollur Script
<? PHP / ** * Osservatur disinn tal-mudell 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 Pattern Eżempju fil-PHP". PHP_EOL; eku'================================'. PHP_EOL; / / Twaqqaf suġġett tagħna $ Suġġett = ArticleAggregator ġodda (); eku "- ArticleAggregator maħluqa". PHP_EOL; / / Żid ftit osservaturi $ Suġġett> addObserver (ġdid NewsObserver ()); $ Suġġett> addObserver ($ gossiper = ġdid GossipObserver ()); eku "- Added NewsObverser & GossipObserver". PHP_EOL. PHP_EOL; / / Ħoss,, ħoss ħoss ... Aħbarijiet Flash! eku "Newsflash: ċelebrità tar-rugby attur tant iħobb finanzi". PHP_EOL; eku'================================================ ". PHP_EOL; $ Suġġett> addNewsStory ("ċelebrità tar-rugby attur tant iħobb finanzjament"); eku PHP_EOL; eku "- SportObserver sab u trid li jingħaqdu mal-grupp!"; $ Suġġett> addObserver (ġdid SportObserver ()); eku PHP_EOL. PHP_EOL; / / Ħoss,, ħoss ħoss ... Aħbarijiet Flash! "Newsflash: il-gvern messijiet mill-ġdid!" eku . PHP_EOL; eku'======================================='. PHP_EOL; $ Suġġett> addNewsStory ("messijiet tal-gvern mill-ġdid!"); eku PHP_EOL; / / Ħoss,, ħoss ħoss ... Aħbarijiet Flash! "Newsflash: moda u futbol jgħaqqdu" eku. PHP_EOL; eku'======================================='. PHP_EOL; $ Suġġett> addNewsStory ("moda u futbol jgħaqqdu"); eku PHP_EOL; / / Ħoss,, ħoss ħoss ... Aħbarijiet Flash! eku "Newsflash: mużika u l-politika, liema jmiss?" . PHP_EOL; eku'=========================================='. PHP_EOL; $ Suġġett> addNewsStory ('mużika u l-politika, liema jmiss? "); eku PHP_EOL; / ** Gossipers * jikbru għajjien ta 'aħbarijiet malajr ħafna u ikunu iddeċidew * Biex jieqfu jisimgħu, minkejja l-aħbarijiet interessanti illum! * / eku "- GossipObserver huwa 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'inhu l-tema?
Hello,
Tista 'tgħidli liema hija s-sistema fl-istampa?
Fedora 12?
X'inhu l-tema?
Fedora 11 tagħha mal Kde applikati. Glasslooks tema nemmen.