PHP Design Patterns - наблюдател на образи
Аз бях четене Head First Design Patterns неотдавна и реших да напиша някои от моделите като примери PHP за собствената си изгода. Първият от тях, че аз реших да се код е наблюдател на образи . Официалната дефиниция на наблюдател Модела е:
Наблюдателят модел (подмножество на асинхронни публикува / абонирате модел ) е софтуер шарка , в които обект , наречен по този въпрос, поддържа списък на лица на издръжка, наречена наблюдатели, и да ги уведоми автоматично на някоя от държавите промени, обикновено като се обадите един от техните методи . Тя се използва основно за изпълнение на разпределени системи за обработка събитие.
Като стане по-слабо свързани системи като се уверите, че когато едно събитие се случва на всички системи, които изискват познания по тези актуализации са информирани. Например, един блог пост, след запис на мнение може да се наложи да се актуализира с търсачката (например Lucene), актуализираме сайта, бележки, електронна поща записания потребители и т.н. Наблюдателят модел позволява на разработчиците да добавят допълнителни слушатели без редакция си наблюдавани обект . Чрез инжектиране наблюдатели (т.е. търсене наблюдател двигател актуализация, карта на сайта генератор и т.н.) в обект (т.е. системата блог пост редактиране) можем да позволим това да извърши всички необходими промени, без никакви промени.
Преди модел наблюдател е идентифициран обичайните трик е да се актуализира наблюдавани обект с допълнителен ред с код за актуализиране на необходимата система, както и премахване на линията на код, както се изисква. Това не дава възможност за лесно добавяне и премахване на наблюдатели.
Предметът актуализации на всички свои наблюдатели чрез метод за актуализация. Този метод за актуализация призовава метод, при всеки наблюдател, който се получава от прилагането на един интерфейс. Наблюдателите може да добавите само премахне чрез методите в наблюдавани обект.
Това е основното! Аз винаги ще намерите пример за най-добрия начин на живот / разбиране, така че тук ми е кодирана се например ...
Наблюдател на образи в PHP
В моя пример съм създал системата за новини (NewsAggregator), който изпраща заглавие актуализации новини за по-малките новинарски емисии. Тук новини sytem заема мястото на този въпрос, наблюдавани и т.н. като има предвид, новинарски емисии влезе в ролята на наблюдатели или слушателите.
След инициализирани наблюдатели може да се приложи и се откъснат от тази област, когато им е удобно. В моя пример съм създал три наблюдатели, тези сканиране в заглавията на вестниците, изпратена от темата и "вик" на новините, ако му е необходимо. Трите наблюдатели са наречени по-долу, заедно с условията им за сканиране при получаване заглавия:
- Спорт наблюдател: "ръгби", "футбол", "тенис"
- Новини наблюдател: "политика", "финанси", "правителство"
- Клюки наблюдател: "знаменитост", "музика", "мода"
След initalising предмет добавя новини и клюки наблюдатели и изпрати актуализация на новини. След това този спорт наблюдател е добавен преди по-актуалните новини са изпратени. На последно място клюки наблюдател се отстранява преди да вземе окончателно заглавие новина е изпратена.
Трите различни класове наблюдател изпълнение на интерфейса Observer, това им дава ясен интерфейс / метод, чрез който те ще получават известие. При условие, че прилагат интерфейс Наблюдател те ще могат да се прикрепят към този въпрос. Това позволява също така и с програмния модел на "програма за интерфейси не реализации". Класът NewsAggregator разширява абстрактни Тема класа, която ни дава трите изискват публични методи:
- updateObservers ()
- addObserver ()
- removeObserver ()
Кодът може да се види работата тук, наблюдател на образи в PHP бягане , както и на кода може да изтеглите от тук, наблюдател на образи в PHP код .
Наблюдател Script
<? PHP / ** * Този файл съдържа наблюдатели * * @ Автор Лойд Watkin * @ От 2009/12/23 * / абстрактен клас Тема { абстрактни обществени addObserver функция ($ наблюдател наблюдател); абстрактни обществени removeObserver функция ($ наблюдател наблюдател); абстрактни обществени updateObservers функция ($ newsHeadline); } / ** * Това е темата класа за пример * * @ Автор Лойд Watkin * @ От 2009/12/23 * / клас ArticleAggregator разширява Предмет { / ** * Приема списък на нашите наблюдатели * * @ Var масив * / защитени $ _observerList = масив (); / ** * Метод за добавяне на наблюдател * * @ Var Наблюдател $ наблюдател * @ Връщане невалидни * / публична функция addObserver (Наблюдател $ наблюдател) { $ Това-> _observerList [] = $ наблюдател; } / ** * Метод за отстраняване на наблюдател * * @ Var Наблюдател $ наблюдател * @ Върне булева * / публична функция removeObserver (Наблюдател $ наблюдател) { foreach ($ това-> _observerList ЗА $ ключ => $ OB) { ако ($ OB == $ наблюдател) { изключено ($ това-> _observerList [$ ключ]); връщане вярно; } } връщане фалшиви; } / ** * Метод за актуализиране наблюдатели * * @ Var низ $ newsHeadline * @ Връщане невалидни * / обществени updateObservers функция ($ newsHeadline) { foreach ($ това-> _observerList долара OB) { $ Акушер-> Update ($ newsHeadline); } } / ** * Добавяне на нова новина * * @ Var низ $ история * @ Връщане невалидни * / публична функция addNewsStory ($ история) { Ако (празна ($ история) | |! is_string ($ история)) { хвърлят нови InvalidArgumentException ("Очаквани съдържа статия! '); } $ Това-> updateObservers ($ история); } }
Тема / наблюдавани Script
? <PHP / ** * Този файл съдържа предмет * * @ автор Лойд Watkin * @ тъй 2009/12/23 * / абстрактен клас Тема {абстрактни публична функция addObserver (Наблюдател $ наблюдател); абстрактни публична функция removeObserver (Наблюдател $ наблюдател ); абстрактни обществени updateObservers функция ($ newsHeadline);} / ** * Това е темата класа за пример * * @ автор Лойд Watkin * @ тъй 2009/12/23 * / клас ArticleAggregator разширява Относно {/ ** * Поддържа списък на нашите наблюдатели * * @ Var масив * / $ защитени _observerList = масив (); / ** * Метод за добавяне на наблюдател * * @ Var Наблюдател $ наблюдател * @ връщане нищожен * / публична функция addObserver (Наблюдател $ наблюдател) {$ това-> _observerList [] = $ наблюдател;} / ** * Метод за премахване на наблюдател * * @ Var Наблюдател $ наблюдател * @ върне булева * / обществен removeObserver функция ($ наблюдател наблюдател) {foreach ($ това-> _observerList ЗА $ ключ => $ OB) {ако ($ OB == $ наблюдател) {изключено ($ това-> _observerList [$ ключ]); връщане вярно;}} връщане фалшиви;} / ** * Метод за актуализиране наблюдатели * * @ Var низ $ newsHeadline * @ връщане нищожен * / обществен updateObservers функция ($ newsHeadline) {foreach ($ това-> _observerList долара OB) {$ акушер-> Update ($ newsHeadline);}} / ** * Add нов * новини * @ Var низ $ история * @ връщане нищожен * / публична функция addNewsStory ($ история) {ако (празна ($ история) | |! is_string ($ история)) {хвърлят нова InvalidArgumentException ("Очаква се новини история ");!} $ това-> updateObservers ($ история);}} Controller Script
<? PHP / ** * Наблюдател Пример Дизайн Модела * * @ Автор Лойд Watkin * @ От 2009/12/23 * @ Връзка http://www.evilprofessor.co.uk * / включва "observers.php"; включва "subject.php"; ако (! празна ($ _SERVER ['HTTP_USER_AGENT'])) { ехо ""; } / / Какво ще правим? ехо "Наблюдател Модела Пример в PHP". PHP_EOL; ехо'================================'. PHP_EOL; / / Създаване на нашата тема $ Предмет = нови ArticleAggregator (); ехо "- ArticleAggregator създаден". PHP_EOL; / / Добавяне на някои наблюдатели $ Обект> addObserver (ново NewsObserver ()); $ Обект> addObserver ($ gossiper = нови GossipObserver ()); ехо "- добавяне NewsObverser & GossipObserver". PHP_EOL. PHP_EOL; / / Сигнал, звуков сигнал, звуков сигнал ... Новини Flash! ехо "Новина: знаменитост ръгби играч обича финанси". PHP_EOL; ехо'================================================ ". PHP_EOL; $ Обект> addNewsStory ("играч знаменитост ръгби обича финансиране"); ехо PHP_EOL; ехо "- SportObserver е установено, и иска да се присъединят към групата!"; $ Обект> addObserver (ново SportObserver ()); ехо PHP_EOL. PHP_EOL; / / Сигнал, звуков сигнал, звуков сигнал ... Новини Flash! ехо "Новина: Правителството офицерски отново!" . PHP_EOL; ехо'======================================='. PHP_EOL; $ Обект> addNewsStory ("правителство офицерски отново!"); ехо PHP_EOL; / / Сигнал, звуков сигнал, звуков сигнал ... Новини Flash! ехо "Новина: мода и футболни комбинират". PHP_EOL; ехо'======================================='. PHP_EOL; $ Обект> addNewsStory (мода и футболни съчетават '); ехо PHP_EOL; / / Сигнал, звуков сигнал, звуков сигнал ... Новини Flash! ехо "Новина: музиката и политиката, какво следва?" . PHP_EOL; ехо'=========================================='. PHP_EOL; $ Обект> addNewsStory ("музиката и политиката, какво следва?"); ехо PHP_EOL; / ** * Gossipers растат уморен на новини много бързо и са решили * Да спре слушане, въпреки всички интересни новини днес! * / ехо "- GossipObserver е скучно и напуска групата!" . PHP_EOL. PHP_EOL; $ Обект> removeObserver ($ gossiper); / / Сигнал, звуков сигнал, звуков сигнал ... Новини Flash - Актуализация на по-ранна история! ехо "NewsUpdate: мода и футболни съчетават казва". "Държавен". PHP_EOL; ехо'================================================ ". '========='. PHP_EOL; $ Обект> addNewsStory (мода и футболни комбинират ". "Правителството казва"); ехо PHP_EOL; ако (! празна ($ _SERVER ['HTTP_USER_AGENT'])) { ехо "";
}



















































Здравейте,
Първо, английският ми е много лошо, а след това
Можете ли да ми каже каква е системата на снимката?
Fedora 12?
Каква е темата?
Здравейте,
Можете ли да ми каже каква е системата на снимката?
Fedora 12?
Каква е темата?
Неговата Fedora 11 с KDE прилагат. Glasslooks тема аз вярвам.