PHP Design Patterns - Pola Observer
Aku sudah membaca Kepala Pertama Design Patterns baru-baru ini dan telah memutuskan untuk menulis beberapa pola sebagai contoh PHP untuk keuntungan sendiri. Yang pertama bahawa saya telah memutuskan untuk kod up adalah Pola Observer . Definisi formal Pola Observer adalah:
Pola pemerhati (a subset dari asinkron menerbitkan / melanggan pola ) merupakan sebuah perisian rekabentuk pola di mana sebuah objek , yang disebut subjek, menyimpan senarai tanggungan syarikat, pemerhati disebut, dan memberitahu mereka secara automatik dari setiap perubahan negara, biasanya dengan menelefon salah satu daripada mereka kaedah . Hal ini terutama digunakan untuk melaksanakan sistem pengendalian acara teragih.
Ketika sistem menjadi lebih longgar digabungkan memastikan bahawa ketika sebuah peristiwa terjadi semua sistem yang memerlukan pengetahuan update ini diinformasikan. Misalnya, posting blog, setelah menyimpan tulisan kita mungkin perlu mengemas kini enjin carian (contohnya Lucene), update sitemap kita, tag, pengguna melanggan email, dll Pola pemerhati membolehkan pemaju untuk menambah pendengar tambahan tanpa mengedit objek diamati mereka . Dengan menyuntikkan pemerhati (iaitu enjin carian pemerhati update, sitemap generator, dll) ke dalam (sistem posting blog iaitu mengedit) subjek kita boleh memungkinkan untuk melakukan semua kemas kini yang diperlukan tanpa sebarang perubahan.
Sebelum pola Observer mengenalpasti trik yang biasa akan mengemas kini objek diamati dengan garis tambahan kod untuk mengemas kini sistem yang diperlukan, dan memadam baris kod seperti yang diperlukan. Ini tidak membolehkan untuk dengan mudah menambah dan memadam pemerhati.
Subjek update semua pemerhati yang melalui kaedah update. Kaedah update panggilan suatu kaedah dalam setiap pemerhati yang berasal dari implementasi interface. Pemerhati boleh menambah memadam diri melalui kaedah dalam objek diamati.
Itu dasarnya! Saya selalu mencari contoh sebagai kaedah terbaik untuk belajar / pemahaman jadi inilah contoh saya kod Facebook ...
Pola Observer PHP
Dalam contoh saya telah membuat sebuah sistem berita (NewsAggregator) yang menghantar headline update berita untuk feed berita yang lebih kecil. Di sini Sytem berita mengambil tempat Subyek, diamati, dll sedangkan berita feed mengambil peranan pemerhati atau Pendengar.
Setelah pemerhati yang telah diaktifkan boleh melampirkan dan melepaskan diri dari subjek sebagai mereka mahu. Dalam contoh saya, saya telah membuat tiga pemerhati, ini scan headline dihantar oleh subjek dan 'berteriak' berita jika yang sesuai. Ketiga pemerhati bernama bawah bersama-sama dengan syarat mereka scan ketika menerima berita utama:
- Sport Observer: 'rugby', 'bola sepak', 'Tenis'
- Berita Pemerhati: 'politik', 'kewangan', 'kerajaan'
- Gosip Observer: 'selebriti', 'muzik', 'fashion'
Setelah initalising subjek saya menambah pemerhati berita dan gosip dan menghantar update berita. Setelah itu pemerhati sukan ditambah sebelum update berita lebih banyak dihantar keluar. Terkini pemerhati gosip dihapuskan sebelum headline berita akhir dihantar keluar.
Tiga kelas yang berbeza pemerhati mengimplementasikan interface Observer, ini memberi mereka antara muka yang jelas / kaedah di mana mereka akan menerima update. Asalkan mereka melaksanakan interface Observer mereka akan dapat melampirkan diri Subjek. Hal ini juga menjaga dengan paradigma pengaturcaraan 'program untuk antara muka tidak pelaksanaan'. Kelas NewsAggregator memperluaskan Subjek kelas abstrak, yang menyediakan kami dengan tiga kaedah umum yang diperlukan:
- updateObservers ()
- addObserver ()
- removeObserver ()
Kod dapat dilihat berjalan di sini, Pemerhati Pola PHP Menjalankan , dan kod yang boleh didownload dari sini, Observer Pola PHP Code .
Pemerhati Script
<? Php / ** * Fail ini mengandungi pemerhati * * @ Author Lloyd Watkin * @ Sejak 2009/12/23 * / kelas abstrak Perihal { abstrak addObserver fungsi awam (Observer $ pemerhati); abstrak removeObserver fungsi awam (Observer $ pemerhati); fungsi abstrak updateObservers umum ($ newsHeadline); } / ** * Ini adalah kelas subjek misalnya * * @ Author Lloyd Watkin * @ Sejak 2009/12/23 * / ArticleAggregator kelas meluas Subject { / ** * Memiliki senarai pemerhati kami * * @ Var array * / dilindungi $ _observerList = array (); / ** * Kaedah untuk menambah pemerhati * * @ Var Pemerhati $ pemerhati * @ Return void * / fungsi awam addObserver (Observer $ pemerhati) { $ This-> _observerList [] = $ pemerhati; } / ** * Kaedah untuk menghapuskan pemerhati * * @ Var Pemerhati $ pemerhati * @ Return boolean * / fungsi awam removeObserver (Observer $ pemerhati) { foreach ($ this-> _observerList AS $ key => $ ob) { if ($ ob == $ pemerhati) { unset ($ this-> _observerList [$ key]); return true; } } return false; } / ** * Kaedah untuk mengemaskini pemerhati * * @ Var string $ newsHeadline * @ Return void * / fungsi awam updateObservers ($ newsHeadline) { foreach ($ this-> _observerList AS $ ob) { $ Ob-> update ($ newsHeadline); } } / ** * Tambah cerita berita baru * * @ Var string $ cerita * @ Return void * / fungsi awam addNewsStory ($ cerita) { if (kosong ($ kisah) | | is_string ($ cerita)!) { melemparkan InvalidArgumentException baru ('Diduga sebuah berita!'); } $ This-> updateObservers ($ cerita); } }
Subject Script / diamati
? <Php / ** * Fail ini mengandungi subjek * * @ author Lloyd Watkin * @ sejak 2009/12/23 * / kelas abstrak Subject {abstrak fungsi addObserver awam (Observer $ pemerhati); abstrak fungsi removeObserver awam (Observer $ pemerhati ); updateObservers fungsi abstrak umum ($ newsHeadline);} / ** * Ini adalah kelas subjek contoh * * @ author Lloyd Watkin * @ sejak 2009/12/23 * / kelas ArticleAggregator extends Subject {/ ** * Simpan senarai * * pemerhati kita @ * array var / dilindungi $ _observerList = array (); / ** * Kaedah untuk menambah seorang pemerhati * * @ var Observer * pemerhati $ return @ * void / fungsi addObserver awam (Observer $ pemerhati) {$ this-_observerList> [] pemerhati $ =;} / ** * Method untuk menghapuskan pemerhati * @ var Pemerhati * $ pemerhati @ return * boolean / removeObserver fungsi awam (Observer $ pemerhati) {foreach ($ this-> _observerList AS $ key => $ ob) {if ($ ob == $ pemerhati) {unset (_observerList $ this-> [$ key]); return true;}} return false;} / ** * Kaedah untuk mengemaskini pemerhati * * @ var string * $ newsHeadline @ return void * / updateObservers fungsi awam ($ newsHeadline) {foreach ($ this-> _observerList AS $ ob) {update $ ob-> ($ newsHeadline);}} / ** * Tambah sebuah berita baru * * @ var string * $ cerita @ return void * / fungsi addNewsStory umum ($ cerita) {if (kosong ($ kisah) | |! is_string ($ cerita)) {membuang InvalidArgumentException baru ('Diharapkan berita cerita');!} $ this-> updateObservers ($ cerita);}} Controller Script
<? Php / ** * Pemerhati Design Pola Contoh * * @ Author Lloyd Watkin * @ Sejak 2009/12/23 * @ Link http://www.evilprofessor.co.uk * / termasuk 'observers.php'; termasuk 'subject.php'; if (kosong ($ ['HTTP_USER_AGENT'] _SERVER)!) { echo ''; } / / Apa yang kita lakukan? echo 'Pemerhati Pola Contoh di PHP'. PHP_EOL; echo'================================'. PHP_EOL; / / Menetapkan subjek kami $ Subjek ArticleAggregator = new (); echo '- ArticleAggregator diciptakan'. PHP_EOL; / / Tambah beberapa pemerhati $ Subjek-> addObserver (baru NewsObserver ()); (Bigos $ = baru GossipObserver ()) $ subjek-> addObserver; echo '- Ditambah NewsObverser & GossipObserver'. PHP_EOL. PHP_EOL; / / Bunyi, bip, bip ... News Flash! echo 'NewsFlash: selebriti Pemain rugby mencintai kewangan'. PHP_EOL; echo'================================================ '. PHP_EOL; $ Subjek-> addNewsStory ('selebriti Pemain rugby mencintai kewangan'); echo PHP_EOL; echo '- SportObserver telah mencari dan ingin bergabung dengan kumpulan!'; $ Subjek-> addObserver (baru SportObserver ()); echo PHP_EOL. PHP_EOL; / / Bunyi, bip, bip ... News Flash! echo 'NewsFlash: kerajaan meranapkan lagi! " . PHP_EOL; echo'======================================='. PHP_EOL; $ Subjek-> addNewsStory ('kerajaan meranapkan lagi!'); echo PHP_EOL; / / Bunyi, bip, bip ... News Flash! echo 'NewsFlash: fashion dan sepakbola menggabungkan'. PHP_EOL; echo'======================================='. PHP_EOL; $ Subjek-> addNewsStory ('fashion dan sepakbola menggabungkan'); echo PHP_EOL; / / Bunyi, bip, bip ... News Flash! echo 'NewsFlash: muzik dan politik, apa selanjutnya? " . PHP_EOL; echo'=========================================='. PHP_EOL; addNewsStory $ subjek-> ('muzik dan politik, apa selanjutnya?'); echo PHP_EOL; / ** * Gossipers tumbuh lelah berita yang sangat cepat dan telah memutuskan * Untuk berhenti mendengar, walaupun semua berita menarik hari ini! * / echo '- GossipObserver bosan dan meninggalkan kumpulan! " . PHP_EOL. PHP_EOL; $ Subjek-> removeObserver ($ bigos); / / Bunyi, bip, bip ... News Flash - Update ke cerita sebelumnya! echo 'NewsUpdate: fashion dan sepakbola menggabungkan kata ". 'Kerajaan'. PHP_EOL; echo'================================================ '. '========='. PHP_EOL; addNewsStory $ subjek-> ('fashion dan sepakbola menggabungkan'. 'Mengatakan kerajaan'); echo PHP_EOL; if (kosong ($ ['HTTP_USER_AGENT'] _SERVER)!) { echo '';
}



















































Halo,
Pertama, saya inggris sangat miskin, maka
Bolehkah anda ceritakan apa sistem dalam gambar?
fedora 12?
Apa tema?
Halo,
Bolehkah anda ceritakan apa sistem dalam gambar?
Fedora 12?
Apa tema?
Its fedora 11 dengan KDE diterapkan. tema Glasslooks Saya percaya.