PHP Design Patterns - Observer minta
Én olvastam Head First Design Patterns a közelmúltban, és úgy döntött, hogy írjon néhány minták a PHP példákat a saját javára. Az első, hogy én döntöttem, hogy kóddal fel az Observer minta . A hivatalos meghatározásának Observer minta:
A megfigyelő minta (egy részét az aszinkron közzé / subscribe minta ) egy szoftver tervezési mintát , amikor egy objektum , az úgynevezett a téma, egy listát az eltartottak, az úgynevezett megfigyelők, és értesíti őket automatikusan a bármely állam változások általában hívja egyik módszer . Ez főleg, hogy végre elosztott esemény kezelő rendszerek.
Mivel a rendszer egyre inkább lazán összekapcsolt ügyelve arra, hogy ha egy esemény történik, minden igénylő rendszerek ismerete ezek a frissítések képesek tájékoztatni. Például egy blogbejegyzés, mentés után egy poszt is előfordulhat, hogy frissítenie kell a kereső (pl. Lucene), frissítjük sitemap, címkék, e-mail jegyzett felhasználó, stb A megfigyelő minta lehetővé teszi a fejlesztők, így további hallgatók nélkül szerkesztése a megfigyelhető objektumok . Az intravénás megfigyelők (azaz a kereső frissítést megfigyelő, a sitemap generátor, stb) egy tárgy (pl. blogbejegyzést szerkesztő rendszer) tudjuk hogy az, hogy teljes a szükséges frissítéseket változtatás nélkül.
Mielőtt az Observer minta azonosították a szokásos trükk az lenne, hogy frissítse a megfigyelhető objektum egy további sort, hogy frissítse a szükséges rendszert, és eltávolítja a vonal a kód szükséges. Ez nem teszi lehetővé a könnyű hozzáadása és eltávolítása megfigyelők.
A téma frissíti annak minden megfigyelő keresztül update módszert. Ez a frissítés metódushívások módszer minden megfigyelő amely származó végrehajtási felület. Megfigyelők is hozzá egy eltávolítani magukat módszerekkel a megfigyelhető objektumot.
Ez alapvetően meg! Mindig találni példát, hogy a legjobb módszer a tanulás / megértés, így itt a kódolt fel például ...
Observer minta a PHP
A példában, amit létrehoztunk egy hírt rendszer (NewsAggregator), amely küld híreket headline frissítések a kisebb hírcsatornák. Itt a hír sytem helyére kerül a téma, Megfigyelhető, stb míg a hírcsatornák venni a szerepét a megfigyelők, illetve hallgatóknak.
Ha kezdeményezte megfigyelők is csatolni, és vegye le magukat a téma belátásuk szerint. A példában hoztam létre három megfigyelő, ezeket olvassa be a szalagcímek küldött a témát, és "kiabálni" a hír, ha szükséges. A három megfigyelők alább megnevezett mellett a feltételek, hogy keresni fogadásakor hírek:
- Sport Observer: "rugby", "futball", "tenisz"
- Hírek Observer: "politika", "pénzügyi", "kormány"
- Gossip Observer: "celebrity", "zene", "divat"
Miután initalising tárgyát vehetek a hírek és pletykák megfigyelők és küldje el a hírt frissítés. Ezt követően a sport megfigyelő adni, mielőtt további hírek frissítések küldött ki. Végül a pletyka megfigyelő távolítani, mielőtt a végső hír főcím is küldött ki.
A három különböző megfigyelő osztály végre a felület Observer, ez ad nekik egy világos felület / módszer, amelyen keresztül fognak kapni. Amennyiben azok az Observer interfészt képesek lesznek, hogy hozzákötődnek a tárgya. Ez tartja a programozási paradigmája "program interfészek nem implementációk". A NewsAggregator osztály kiterjeszti az absztrakt osztály tárgya, amely biztosítja számunkra a három szükséges állami módszerek:
- updateObservers ()
- addObserver ()
- removeObserver ()
A kód látható fut itt Observer minta PHP futtatása , és a kód is letölthető innen, Observer Pattern a PHP kód .
Observer Script
<? Php / ** * Ez a fájl tartalmazza a megfigyelők * * @ Szerző Lloyd Watkin * @ Óta 2009/12/23 * / absztrakt osztály Tárgy { absztrakt public function addObserver (Observer $ megfigyelő); absztrakt public function removeObserver (Observer $ megfigyelő); absztrakt public function updateObservers ($ newsHeadline); } / ** * Ez a téma osztály a példa * * @ Szerző Lloyd Watkin * @ Óta 2009/12/23 * / osztályú ArticleAggregator kiterjeszti Tárgy { / ** * Tárolására egy lista a megfigyelők * * @ Var array * / protected $ _observerList = array (); / ** * Módszer, hogy adjunk egy megfigyelő * * @ Var Observer $ megfigyelői * @ Return void * / public function addObserver (Observer $ megfigyelő) { $ This-> _observerList [] = $ megfigyelőként; } / ** * Módszer, hogy távolítsa el a megfigyelő * * @ Var Observer $ megfigyelői * @ Return boolean * / public function removeObserver (Observer $ megfigyelő) { foreach ($ this-> _observerList AS $ key => $ ob) { if ($ ob == $ megfigyelő) { unset ($ this-> _observerList [$ kulcs]); return true; } } return false; } / ** * Módszer, hogy frissítse a megfigyelők * * @ Var string $ newsHeadline * @ Return void * / public function updateObservers ($ newsHeadline) { foreach ($ this-> _observerList AS $ ob) { $ Ob-> update ($ newsHeadline); } } / ** * Új hír * * @ Var string $ story * @ Return void * / public function addNewsStory ($ történet) { if (empty ($ story) | |! is_string ($ story)) { dobja új InvalidArgumentException ("Várható egy hírt! '); } $ This-> updateObservers ($ story); } }
Tárgy / Megfigyelhető Script
<? Php / ** * Ez a fájl tartalmazza a téma * * @ szerző Lloyd Watkin * @ óta 2009/12/23 * / absztrakt osztály Tárgy {abstract public function addObserver (Observer $ megfigyelő), elvont public function removeObserver (Observer $ megfigyelői ), elvont public function updateObservers ($ newsHeadline);} / ** * Ez a téma osztály a példa * * @ szerző Lloyd Watkin * @ óta 2009/12/23 * / class ArticleAggregator kiterjed Tárgy {/ ** * tárolására egy lista a megfigyelők * * @ var array * / protected $ _observerList = array (); / ** * módszer, hogy adjunk egy megfigyelő * * @ var Observer $ megfigyelőt * @ return void * / public function addObserver (Observer $ megfigyelő) {$ this-> _observerList [] = $ megfigyelőként;} / ** * módszer, hogy távolítsa el a megfigyelő * * @ var Observer $ megfigyelőt * @ return boolean * / public function removeObserver (Observer $ megfigyelő) {foreach ($ this-> _observerList AS $ key => $ ob) {if ($ ob == $ megfigyelő) {unset ($ this-> _observerList [$ kulcs]) return true;}} return false;} / ** * módszer, hogy frissítse a megfigyelők * * @ var string $ newsHeadline * @ return void * / public function updateObservers ($ newsHeadline) {foreach ($ this-> _observerList AS $ ob) {$ ob-> update ($ newsHeadline);}} / ** * Új Új hír * * @ var string $ story * @ return void * / public function addNewsStory ($ történet) {if (empty ($ story) | |! is_string ($ story)) {throw new InvalidArgumentException ("várható a hír történetet! ");} $ this-> updateObservers ($ történet);}} Controller Script
<? Php / ** * Observer tervezési minta példa * * @ Szerző Lloyd Watkin * @ Óta 2009/12/23 * @ Link http://www.evilprofessor.co.uk * / között "observers.php"; között "subject.php"; if (! empty ($ _SERVER ['HTTP_USER_AGENT'])) { echo '"; } / / Mit csinálunk? echo "Observer minta példa PHP-ben." PHP_EOL; echo'================================'. PHP_EOL; / / Beállítása a téma $ Subject = új ArticleAggregator (); echo '- ArticleAggregator létrehozott ". PHP_EOL; / / Add Egyes megfigyelők $ Subject-> addObserver (új NewsObserver ()); $ Subject-> addObserver ($ gossiper = new GossipObserver ()); echo '- Új NewsObverser és GossipObserver ". PHP_EOL. PHP_EOL; / / Hangjelzés, hangjelzés, csipog ... Hírek Flash! echo 'Hírmorzsa: celeb rögbi játékos szeret finanszírozás ". PHP_EOL; echo'================================================ ". PHP_EOL; $ Subject-> addNewsStory (celeb rögbi játékos szeret pénzügyek '); echo PHP_EOL; echo '- SportObserver talált, és szeretne csatlakozni a csoporthoz! "; $ Subject-> addObserver (új SportObserver ()); echo PHP_EOL. PHP_EOL; / / Hangjelzés, hangjelzés, csipog ... Hírek Flash! echo 'Hírmorzsa: kormányzati elrontja újra! " . PHP_EOL; echo'======================================='. PHP_EOL; $ Subject-> addNewsStory ("kormányzati elrontja újra! '); echo PHP_EOL; / / Hangjelzés, hangjelzés, csipog ... Hírek Flash! echo 'Hírmorzsa: divat és a futball össze ". PHP_EOL; echo'======================================='. PHP_EOL; $ Subject-> addNewsStory ("a divat és a futball össze"); echo PHP_EOL; / / Hangjelzés, hangjelzés, csipog ... Hírek Flash! echo 'Hírmorzsa: a zene és a politika, mi a következő lépés? " . PHP_EOL; echo'=========================================='. PHP_EOL; $ Subject-> addNewsStory ("a zene és a politika, mi a következő lépés?"); echo PHP_EOL; / ** * Gossipers nő belefáradt a hírek nagyon gyorsan és úgy döntött, * A stop hallgatni, annak ellenére, hogy minden érdekes hír ma! * / echo '- GossipObserver unatkozik, és elhagyja a csoportot! " . PHP_EOL. PHP_EOL; $ Subject-> removeObserver ($ gossiper); / / Hangjelzés, hangjelzés, csipog ... Hírek Flash - Frissítés egy korábbi történet! echo 'NewsUpdate: divat és a futball össze azt mondja ". "Kormány". PHP_EOL; echo'================================================ ". '========='. PHP_EOL; $ Subject-> addNewsStory ("a divat és a futball össze". Mondja kormány); echo PHP_EOL; if (! empty ($ _SERVER ['HTTP_USER_AGENT'])) { echo '";
}



















































Hello,
Először is, az angol tudásom nagyon gyenge, akkor
Meg tudja mondani, mi az a rendszer, a képen?
Fedora 12?
Mi a téma?
Hello,
Meg tudja mondani, mi az a rendszer, a képen?
Fedora 12?
Mi a téma?
A Fedora 11 KDE alkalmazni. Glasslooks téma azt hiszem.