Modelet PHP Design - modeli Observer
Unë kam qenë lexim Shefi i parë Design Modele kohët e fundit dhe kam vendosur të shkruaj disa nga modelet si shembuj PHP për përfitimin e mi. E para që unë kam vendosur të kodit lart është modeli Observer . Përkufizimi formal i modeli Observer është:
Model vëzhgues (një mesin e të josinkronik publikojë / regjistroheni model ) është një software design model në të cilat një objekt , quhet subjekti, mban një listë të ngarkim të tij, vëzhgues i quajtur, dhe njofton ata automatikisht për çdo ndryshim të shtetit, zakonisht duke e quajtur një prej tyre metodave . Ajo është përdorur kryesisht për zbatimin e sistemeve të shpërndara trajtimin e ngjarjes.
Si sistemet e bëhen më të lirshëm të shoqëruar marrjen e sigurt se kur ndodh një ngjarje e të gjitha sistemeve që kërkojnë njohuri të këtyre rejat janë të informuar. Për shembull, një blog post, pas shpëtuar një post që mund të kenë nevojë për të rinovuar një motor kërkimi (p.sh. Lucene), update Sitemap tonë, tags, përdoruesit e-mail abonuar, etj model vëzhguesi lejon zhvilluesve të shtoni dëgjuesit shtesë pa redaktimi objekt i dukshëm . Duke injektuar vëzhguesit (dmth. një motor kërkimi vëzhgues update, një gjenerator sitemap, etj) në një temë (p.sh. sistemi blog post redaktimi) ne mund të lejojë që ajo të kryejë të gjitha të rejat e nevojshme pa ndonjë ndryshim.
Para model Observer ishte identifikuar mashtrim zakonshme do të jetë për të rinovuar objektin e dukshme me një vend tjetër e kodit për të rinovuar sistemin e kërkuara, dhe duke hequr linjë e kodit siç kërkohet. Kjo nuk do të lejojë për lehtësi shtuar dhe duke hequr vëzhguesit.
Të reja i nënshtrohen të gjithë vëzhguesit e vet nëpërmjet një metodë update. Kjo metodë update quan një metodë në çdo vëzhgues i cili rrjedh nga zbatimi i një interface. Vëzhguesit mund të shtoni një hiqni veten përmes metodave në objekt i dukshëm.
Kjo është në thelb ajo! Unë gjithmonë gjej një shembull të jetë metoda më e mirë e të mësuarit / shembull kuptuar deri këtu është e mia të koduar up ...
Model Observer në PHP
Në shembullin tim unë kam krijuar një sistem të lajmeve (NewsAggregator), e cila dërgon lajm për të rejat me titull më të vogla lajme feeds. Këtu sytem lajmeve zë vendin e Subject, i dukshëm, etj ndërsa burime të marrë rolin e vëzhguesit apo Dëgjuesit.
Pasi vëzhguesit initialised mund të bashkëngjitni dhe heq veten nga subjekti si ata e gjykojnë të arsyeshme. Në shembullin tim unë kam krijuar tre vëzhgues, këto scan titujt e dërguar nga subjekti dhe "bërtasin 'lajme nëse është e përshtatshme të saj. Të tre vëzhgues janë të quajtur më poshtë së bashku me kushtet që ata hetim për marrjen e kur titujt e lajmeve:
- tenisit '' 'rugby', Sport Observer: 'futboll',
- Lajme Observer: 'politikë', 'financave', 'qeveri'
- fashion '' 'famshëm', Gossip Observer: 'muzikë',
Pas initalising temë të shtoj vëzhguesit lajme dhe thashetheme dhe të dërgojë një update lajmeve. Pas këtij vëzhguesi sport është shtuar para se të rejat më të lajmeve janë dërguar. Së fundi e vëzhguesit thashetheme është hequr para një titull përfundimtar lajm është dërguar.
Të tre vëzhgues të klasave të ndryshme të zbatuar Observer interface, kjo u jep atyre një ndërfaqe të qartë / metodë përmes të cilave ata do të merrni më të reja. Me kusht që të zbatojnë interface Observer ata do të jenë në gjendje të bashkëngjitni veten në Subject. Kjo gjithashtu mban me paradigmën e programimit të "programit të interfaces nuk Implementimi '. Klasa e NewsAggregator shtrihet në klasën Subject abstrakte, e cila na jep me tre publike metodat e nevojshme:
- updateObservers ()
- addObserver ()
- removeObserver ()
Kodi mund të shihet duke këtu, Observer modeli në PHP Running , dhe kodi mund të shkarkohet nga këtu, Observer modeli në PHP Code .
Observer Script
<? Php / ** * Kjo skedë përmban vëzhguesit * @ * Autori Lloyd Watkin * @ Viti 2009/12/23 * / Subject abstrakte klasë { abstrakte addObserver funksion publik (Observer $ vëzhgues); abstrakte removeObserver funksion publik (Observer $ vëzhgues); updateObservers abstrakte funksion publik ($ newsHeadline); } / ** * Kjo është klasa subjekt për shembull * @ * Autori Lloyd Watkin * @ Viti 2009/12/23 * / ArticleAggregator klasë shtrihet Subject { / ** * Mban një listë të vëzhguesve tanë * * @ Var array * / mbrojtur $ = _observerList array (); / ** * Metoda për të shtuar një vëzhgues * @ * Var Observer $ vëzhgues @ * Kthehet bosh * / addObserver publik funksion (Observer $ vëzhgues) { _observerList $ this-> [] = $ vëzhgues; } / ** * Metoda për të hequr një vëzhgues * @ * Var Observer $ vëzhgues @ * Kthimit boolean * / removeObserver publik funksion (Observer $ vëzhgues) { foreach ($ this-> _observerList AS $ kyç => $ ob) { if ($ ob == $ vëzhgues) { unset ($ this-> _observerList [$ kryesore]); kthim i vërtetë; } } kthimit të rreme; } / ** * Metoda për të rinovuar vëzhgues * @ * String var $ newsHeadline @ * Kthehet bosh * / updateObservers publik funksion ($ newsHeadline) { foreach ($ this-> _observerList AS $ ob) { update $ ob-> ($ newsHeadline); } } / ** * Shto një histori e re e lajmeve * @ * String var $ histori @ * Kthehet bosh * / addNewsStory publik funksion ($ tregim) { në qoftë se (bosh ($ tregim) | |! is_string ($ tregim)) { hedhin InvalidArgumentException ri ('pritshme një histori e lajmeve'); } $ This-> updateObservers ($ histori); } }
Subject / Script dukshëm
? <Php / ** * Kjo skedë përmban * subjekt * @ autor Lloyd Watkin * @ viti 2009/12/23 * / Subject abstrakte klasë abstrakte {addObserver funksion publik (Observer $ vëzhgues); abstrakte removeObserver funksion publik (Observer $ vëzhgues ); updateObservers abstrakte funksion publik ($ newsHeadline);} / ** * Kjo është klasa subjekt për shembull * @ * Autori Lloyd Watkin * @ viti 2009/12/23 * / class ArticleAggregator shtrihet Subject {/ ** * Mban një listë e vëzhguesve * * @ * tanë var array / e mbrojtura $ _observerList = array (); / ** * Metoda për të shtuar një vëzhgues * * @ var Observer * $ @ * vëzhgues të pavlefshme kthimi / addObserver publike funksionin (Observer $ vëzhgues) {_observerList $ this-> [] = $ vëzhguesit;} / ** * Metoda për të hequr një vëzhgues * * @ var Observer * $ @ * vëzhgues boolean kthimi / publike funksionin removeObserver (Observer $ vëzhgues) {foreach ($ this-> _observerList AS $ kyç => $ ob) {if ($ ob == $ vëzhgues) {unset (_observerList $ this-> [$ kryesore]); kthimin e vërtetë;}} kthim false;} / ** * Metoda për të rinovuar vëzhgues * @ * var $ string * newsHeadline @ * pavlefshme kthimi / publike funksionin updateObservers ($ newsHeadline) {foreach ($ this-> _observerList AS $ ob) {update $ ob-> ($ newsHeadline);}} / ** * Shto një histori e lajmeve i ri * * @ var $ string * histori @ * pavlefshme kthimi / publike funksionin addNewsStory ($ tregim) {if (bosh ($ tregim) | |! is_string ($ tregim)) {hedhin InvalidArgumentException ri ('pritshme një lajm histori ');!} $ this-> updateObservers ($ histori);}} Kontrollues Script
<? Php / ** * Design Observer modeli Shembull * @ * Autori Lloyd Watkin * @ Viti 2009/12/23 @ * Lidhje http://www.evilprofessor.co.uk * / përfshijnë 'observers.php'; përfshijnë 'subject.php'; if (! bosh ($ ['HTTP_USER_AGENT'] _SERVER)) { echo ''; } / / Çfarë po bëjmë ne? "Shembull Observer modeli në PHP 'jehonë. PHP_EOL; echo'================================'. PHP_EOL; / / Set up subjektit tonë $ = Subjekt ArticleAggregator reja (); echo '- ArticleAggregator krijuar'. PHP_EOL; / / Add disa vëzhgues $ AddObserver subjekt-> (e re NewsObserver ()); (Thashethemexhi $ = new GossipObserver ()) $ subjekt-> addObserver; echo '- Added NewsObverser & GossipObserver'. PHP_EOL. PHP_EOL; / / Beep, bip, bip ... Lajme flash! echo 'Newsflash: lojtar i famshëm rugby do financave ". PHP_EOL; echo'================================================ '. PHP_EOL; addNewsStory $ subjekt-> ('rugby famshëm lojtar do financave'); echo PHP_EOL; echo '- SportObserver ka gjetur dhe do të bashkohet me grupin!'; $ AddObserver subjekt-> (e re SportObserver ()); echo PHP_EOL. PHP_EOL; / / Beep, bip, bip ... Lajme flash! echo 'Newsflash: Qeveria messes up përsëri! " . PHP_EOL; echo'======================================='. PHP_EOL; $ Subjekt-> addNewsStory ('Qeveria messes up again!'); echo PHP_EOL; / / Beep, bip, bip ... Lajme flash! echo 'Newsflash: modës dhe futbolli kombinuar'. PHP_EOL; echo'======================================='. PHP_EOL; addNewsStory $ subjekt-> ('modës dhe të futbollit të kombinuar'); echo PHP_EOL; / / Beep, bip, bip ... Lajme flash! echo 'Newsflash: muzikë dhe politikë, çfarë tjetër? " . PHP_EOL; echo'=========================================='. PHP_EOL; ('Muzikë dhe politikë, çfarë tjetër? ") AddNewsStory $ subjekt->; echo PHP_EOL; / ** * Përgojuesve rriten të lodhur nga një lajm shumë shpejt dhe kanë vendosur * Për të ndaluar të dëgjuar, pavarësisht të gjitha lajmet interesante sot! * / echo "- GossipObserver është mërzitur dhe e lë të grupit!" . PHP_EOL. PHP_EOL; removeObserver $ subjekt-> ($ thashethemexhi); / / Beep, bip, bip ... Lajme Flash - Update për një histori më parë! echo 'NewsUpdate: modës dhe futbolli kombinuar thotë'. 'Qeveri'. PHP_EOL; echo'================================================ '. '========='. PHP_EOL; addNewsStory $ subjekt-> ('modës dhe të futbollit të kombinuar'. 'Thotë se qeveria'); echo PHP_EOL; if (! bosh ($ ['HTTP_USER_AGENT'] _SERVER)) { echo '';
}



















































Përshëndetje,
Së pari, im anglisht është shumë e dobët, atëherë
Mund të më thoni çfarë është sistemi në foto?
12 Fedora?
Cila është tema?
Përshëndetje,
Mund të më thoni çfarë është sistemi në foto?
Fedora 12?
Cila është tema?
Fedora saj 11 me KDE aplikuar. Tema Glasslooks Unë besoj.