Design Corak PHP - Pemerhati Pola
Saya telah membaca Corak Design Pertama Ketua baru-baru ini dan telah membuat keputusan untuk menulis beberapa corak sebagai contoh PHP untuk manfaat saya sendiri. Yang pertama bahawa saya telah memutuskan untuk kod sehingga Pola Observer . Definisi formal Pola Observer ialah:
Corak pemerhati (subset tak segerak yang menyiarkan / melanggan pola ) corak reka bentuk perisian di mana objek , yang dikenali sebagai subjek, mengekalkan senarai tanggungan, dikenali sebagai pemerhati, dan memberitahu mereka secara automatik apa-apa perubahan negeri, biasanya dengan menghubungi salah satu daripada mereka kaedah . Ia terutamanya digunakan untuk melaksanakan sistem pengendalian acara yang diedarkan.
Kerana sistem menjadi lebih longgar serta membuat memastikan bahawa apabila berlaku peristiwa semua sistem yang memerlukan pengetahuan ini kemas kini dimaklumkan. Sebagai contoh, blog post, selepas menyimpan sesuatu jawatan, kita mungkin perlu untuk mengemas kini enjin carian (contohnya Lucene), mengemaskini sitemap kami, tag, pengguna e-mel melanggan, dan lain-lain corak pemerhati membolehkan pemaju untuk menambah pendengar tambahan tanpa pengeditan objek dilihat mereka . Dengan menyuntik pemerhati (iaitu enjin carian update pemerhati, generator sitemap, dll) ke dalam mata pelajaran (iaitu blog post pengeditan sistem), kita boleh membenarkan ia untuk melaksanakan semua kemas kini yang perlu tanpa sebarang perubahan.
Sebelum corak Pemerhati telah dikenal pasti helah biasa akan kini objek yang dilihat dengan garis tambahan kod untuk mengemaskinikan sistem yang diperlukan, dan membuang baris kod seperti yang diperlukan. Ini tidak membenarkan untuk mudah menambah dan membuang pemerhati.
Kemas kini yang tertakluk semua pemerhati melalui kaedah kemas kini. Kaedah ini kemas kini panggilan kaedah pemerhati setiap yang berasal dari melaksanakan antara muka. Pemerhati boleh menambah 1 mengeluarkan diri mereka melalui kaedah dalam objek yang dilihat.
Itu pada asasnya ia! Saya sentiasa mencari contoh untuk menjadi kaedah terbaik pembelajaran / pemahaman demikian di sini contoh berkod saya ...
Pola pemerhati dalam PHP
Dalam contoh saya, saya telah membuat satu sistem berita (NewsAggregator) yang menghantar update tajuk utama berita suapan berita yang lebih kecil . Di sini sytem berita mengambil tempat Subjek, diperhatikan, dan lain-lain sedangkan suapan berita mengambil peranan pemerhati atau pendengar.
Setelah initialised pemerhati boleh lampirkan dan terpisah dari subjek tersebut kerana mereka melihat patut. Dalam contoh saya, saya telah mencipta tiga pemerhati, ini mengimbas tajuk-tajuk utama yang dihantar oleh subjek dan 'menjerit' berita jika sesuai. Ketiga-tiga pemerhati dinamakan di bawah bersama-sama dengan syarat-syarat yang mereka mengimbas apabila menerima tajuk berita:
- Sport Observer: 'ragbi', 'baju', 'tenis'
- Pemerhati News: 'politik', 'kewangan', 'kerajaan'
- Gossip Observer: 'selebriti', 'muzik', 'fesyen'
Selepas initalising tertakluk itu saya menambah berita dan pemerhati gosip dan menghantar update berita. Selepas ini pemerhati sukan ditambah sebelum lebih banyak update berita dihantar. Akhir sekali pemerhati gosip dikeluarkan sebelum maklumat utama berita terakhir dihantar.
Tiga kelas yang berlainan pemerhati melaksanakan Pemerhati antara muka, ini memberikan mereka satu kaedah yang jelas antara muka / di mana mereka akan menerima kemas kini. Dengan syarat mereka melaksanakan antara muka Observer mereka akan dapat melekat Subjek. Ini juga terus dengan paradigma pengaturcaraan 'program untuk tidak antara muka pelaksanaan'. Kelas NewsAggregator memanjangkan Subject kelas abstrak, yang memberikan kita dengan tiga kaedah yang diperlukan awam:
- updateObservers ()
- addObserver ()
- removeObserver ()
Kod itu boleh dilihat berjalan di sini, Pola Observer dalam PHP Running , dan kod boleh dimuat turun dari sini, Pola Pemerhati Kod PHP .
Pemerhati Script
<? Php / ** * Fail ini mengandungi pemerhati * * @ Author Lloyd Watkin * @ Since 2009/12/23 * / kelas perkara abstrak { fungsi addObserver awam abstrak (Observer $ pemerhati); fungsi removeObserver awam abstrak (Observer $ pemerhati); fungsi updateObservers awam abstrak ($ newsHeadline); } / ** * Ini adalah kelas perkara contohnya * * @ Author Lloyd Watkin * @ Since 2009/12/23 * / ArticleAggregator kelas melanjutkan Subject { / ** * Lulusan senarai pemerhati kami * * @ Array var * / dilindungi $ _observerList = array (); / ** * Cara menambah pemerhati * * @ Var Pemerhati $ pemerhati * _AT_ Pulangan tidak sah * / addObserver fungsi awam (Observer $ pemerhati) { $ This-> _observerList [] = $ pemerhati; } / ** * Kaedah untuk membuang seorang pemerhati * * @ Var Pemerhati $ pemerhati * @ Boolean pulangan * / removeObserver fungsi awam (Observer $ pemerhati) { foreach ($ this-> _observerList AS $ kunci => $ ob) { jika ($ ob == $ pemerhati) { Nyahset ($ this-> _observerList [$ utama]); penyata yang benar; } } penyata palsu; } / ** Kaedah * untuk mengemaskini pemerhati * * _AT_ Var string $ newsHeadline * _AT_ Pulangan tidak sah * / fungsi updateObservers awam ($ newsHeadline) { foreach ($ this-> _observerList AS $ ob) { $ Ob-> update ($ newsHeadline); } } / ** * Tambah berita baru * * @ Var string $ cerita * _AT_ Pulangan tidak sah * / fungsi addNewsStory awam ($ cerita) { if (kosong ($ cerita) | |! is_string ($ cerita)) { membuang InvalidArgumentException baru ('Dijangka berita!'); } $ This-> updateObservers ($ cerita); } }
Subject / Skrip dilihat
? <Php / ** * Fail ini mengandungi subjek * * @ author Lloyd Watkin * @ since 2009/12/23 * / Subject kelas abstrak {fungsi addObserver awam abstrak (Observer $ pemerhati); abstrak fungsi removeObserver awam (Observer $ pemerhati ); updateObservers fungsi awam abstrak ($ newsHeadline);} / ** * ini adalah kelas perkara contohnya * * @ author Lloyd Watkin * @ since 2009/12/23 * / ArticleAggregator kelas melanjutkan Subject {/ ** * Lulusan senarai pemerhati kami * * @ var array * / dilindungi $ _observerList = array (); / ** * Kaedah untuk menambah pemerhati * * @ var Pemerhati $ pemerhati * @ * pulangan tidak sah / addObserver fungsi awam (Observer $ pemerhati) {$ this-> _observerList [] = $ pemerhati;} / ** * Kaedah untuk membuang seorang pemerhati * * @ var Pemerhati $ pemerhati * @ pulangan boolean * / fungsi removeObserver awam (Observer $ pemerhati) {foreach ($ this-> _observerList AS $ kunci => $ ob) {jika ($ ob == $ pemerhati) {Nyahset ($ this-> _observerList [$ utama]); penyata yang benar;}} penyata palsu;} / ** * Kaedah untuk mengemaskini pemerhati * * @ var string $ newsHeadline * @ * pulangan tidak sah / updateObservers fungsi awam ($ newsHeadline) {foreach ($ this-> _observerList AS $ ob) {$ ob-> update ($ newsHeadline);}} / ** * Add berita cerita yang baru * * @ var string $ cerita * @ pulangan tidak sah * / addNewsStory fungsi awam ($ cerita) {jika (kosong ($ cerita) | |! is_string ($ cerita)) {membuang InvalidArgumentException baru ('Dijangka berita cerita ');} $ this-> updateObservers ($ cerita);}} Pengawal Script
<? Php / ** * Design Observer Pola Contoh * * @ Author Lloyd Watkin * @ Since 2009/12/23 * _AT_ Link http://www.evilprofessor.co.uk * / termasuk 'observers.php'; termasuk 'subject.php'; if (! kosong ($ _SERVER ['HTTP_USER_AGENT'])) { echo ''; } / / Apa yang kita lakukan? Contoh Pola Pemerhati PHP 'echo. PHP_EOL; echo'================================'. PHP_EOL; / / Subjek kita $ Subject = baru ArticleAggregator (); echo '- ArticleAggregator dicipta'. PHP_EOL; / / Tambah sesetengah pemerhati $ Hal> addObserver (baru NewsObserver ()); $ Subjek-> addObserver ($ pengecek = baru GossipObserver ()); echo '- Ditambah NewsObverser & GossipObserver'. PHP_EOL. PHP_EOL; / / Bip, bip, bip ... News Flash! echo 'Newsflash: selebriti ragbi pemain mengasihi kewangan'. PHP_EOL; echo'================================================ '. PHP_EOL; $ Hal> addNewsStory ('selebriti pemain ragbi mengasihi kewangan'); echo PHP_EOL; echo '- SportObserver telah dijumpai dan mahu menyertai kumpulan itu!'; $ Hal> addObserver (baru SportObserver ()); echo PHP_EOL. PHP_EOL; / / Bip, bip, bip ... News Flash! echo 'Newsflash: messes kerajaan sekali lagi!' . PHP_EOL; echo'======================================='. PHP_EOL; $ Hal> addNewsStory ('messes kerajaan lagi!'); echo PHP_EOL; / / Bip, bip, bip ... News Flash! echo 'Newsflash: fesyen dan baju menggabungkan'. PHP_EOL; echo'======================================='. PHP_EOL; $ Hal> addNewsStory ('fesyen dan baju menggabungkan'); echo PHP_EOL; / / Bip, bip, bip ... News Flash! echo 'Newsflash: muzik dan politik, apa yang akan datang? . PHP_EOL; echo'=========================================='. PHP_EOL; $ Hal> addNewsStory ('muzik dan politik, apa yang akan datang?'); echo PHP_EOL; / ** * Gossipers tumbuh letih berita dengan cepat dan telah memutuskan * Berhenti mendengar, walaupun semua berita menarik hari ini! * / echo '- GossipObserver bosan dan meninggalkan kumpulan itu!' . PHP_EOL. PHP_EOL; $ Hal> removeObserver ($ pengecek); / / Bip, bip, bip ... News Flash - Update untuk cerita yang lebih awal! echo 'NewsUpdate: fesyen dan baju menggabungkan kata'. 'Kerajaan'. PHP_EOL; echo'================================================ '. '========='. PHP_EOL; $ Hal> addNewsStory ('fesyen dan baju menggabungkan'. 'Berkata kerajaan'); echo PHP_EOL; if (! kosong ($ _SERVER ['HTTP_USER_AGENT'])) { echo '';
}


















































Hello,
Pertama, bahasa inggeris saya sangat miskin, maka
Bolehkah anda beritahu saya apa yang sistem dalam gambar?
fedora 12?
Apakah tema?
Hello,
Bolehkah anda beritahu saya apa yang sistem dalam gambar?
Fedora 12?
Apakah tema?
Fedora 11 Its dengan KDE yang dipohon. Glasslooks tema yang saya percaya.