PHP Design Patterns - наблюдатель "
Я читал Head First Design Patterns недавно и решили написать несколько моделей в качестве примеров PHP для моего собственного блага. Первое, что я решил код на это наблюдатель " . Формальное определение шаблона наблюдателя является:
Наблюдатель картины (подмножество асинхронных публикация / подписка картины ) является программным обеспечением шаблон дизайна , в котором объект , называется предмет, поддерживает список своих иждивенцев, называемых наблюдателей, и уведомляет их автоматически любых изменений состояния, как правило, по телефону один из их методов . Он в основном используется для реализации распределенных систем обработки событий.
Поскольку системы становятся более слабо связанные убедившись, что, когда событие происходит все системы, которые требуют знания эти обновления в сообщении. Например, в блоге, после сохранения должности мы, возможно, потребуется обновление поисковой системы (например Lucene), обновленная карта сайта, теги, электронной почты подписка пользователей и т.д. наблюдателя шаблон позволяет разработчикам добавлять дополнительные слушателей без редактирования их наблюдаемого объекта . Вводя наблюдателей (т.е. обновление поисковой наблюдателя, Sitemap Generator, и т.д.) в теме (т.е. системы после редактирования блог) мы можем позволить ей выполнять все необходимые обновления без каких-либо изменений.
Прежде чем картина наблюдателей был определен обычный прием будет обновлять наблюдаемого объекта с дополнительной строки кода для обновления требуется система, и удаления строки кода по мере необходимости. Это не позволяет легко добавления и удаления наблюдателей.
Предмет обновления всех своих наблюдателей с помощью метода обновления. Это обновление метод вызывает метод в каждом наблюдателя, который является производным от реализации интерфейса. Наблюдатели могут добавить удалить себя с помощью методов в наблюдаемого объекта.
Это в основном это! Я всегда найдете пример для лучший метод обучения / понимание так вот мой закодированы на примере ...
Наблюдатель "в PHP
В моем примере я создал систему новостей (NewsAggregator), которая посылает заголовок обновления новостей меньше новостей. Здесь новости системном занимает место субъекта, наблюдаемая, и т.д. в то время как новостные ленты взять на себя роль наблюдателей или слушателей.
После инициализации наблюдателей можно прикрепить и отделяться от предмета, как они считают нужным. В моем примере я создал три наблюдателя, эти проверки заголовков разослал субъекта и 'рупор' новости, если его необходимости. Три наблюдателя названы ниже, наряду с условиями, которые они сканирования при получении заголовков новостей:
- Спорт наблюдателей: "регби", "футбол", "теннис"
- Новости Observer: "политике", "Финансы", "правительство"
- Сплетни наблюдателей: "знаменитости", "Музыка", "мода"
После initalising предметом добавить новости и сплетни наблюдателей и отправить новостей. После этого спорта наблюдатель добавить перед более обновления новостей разосланы. Наконец сплетни наблюдатель удаляется до окончательного заголовок новости отправляется.
Три различных класса наблюдателя реализации интерфейса наблюдателей, это дает им понятный интерфейс / метод с помощью которого они будут получать обновления. Если они реализуют интерфейс наблюдателя они смогут примкнуть к этому вопросу. Это также идет в ногу со программирования парадигма 'для интерфейсов не реализаций. Класс NewsAggregator расширяет абстрактный субъект, который предоставляет нам три обязательных общедоступных методов:
- updateObservers ()
- addObserver ()
- removeObserver ()
Код можно увидеть здесь работает, наблюдатель "в PHP Запуск , и код может быть загружен отсюда, наблюдатель "в PHP код .
Наблюдатель сценария
<? PHP / ** * Этот файл содержит наблюдателей * * @ Автор Ллойд Уоткин * @ С 2009/12/23 * / Аннотация Тема класса { Аннотация общественного addObserver функции (наблюдатель от $ наблюдателя); Аннотация общественного removeObserver функции (наблюдатель от $ наблюдателя); Аннотация общественного updateObservers функции ($ newsHeadline); } / ** * Это является предметом класса на примере * * @ Автор Ллойд Уоткин * @ С 2009/12/23 * / Класс ArticleAggregator расширяет Тема { / ** * Содержит список наших наблюдателей * * @ VAR массива * / охраняемых $ _observerList = Array (); / ** * Метод, чтобы добавить наблюдателя * * @ VAR наблюдателей $ наблюдателя * @ Возвращения недействительными * / общественного addObserver функции (наблюдатель от $ наблюдателя) { $ Этом-> _observerList [] = $ наблюдателя; } / ** * Метод удаления наблюдателя * * @ VAR наблюдателей $ наблюдателя * @ Возвращения булево * / общественного removeObserver функции (наблюдатель от $ наблюдателя) { Еогеасп ($ этом-> _observerList AS $ ключ => $ ОВ) { если ($ OB == $ наблюдателя) { отключенное ($ ЬЫз-> _observerList [$ ключевых]); Возвращает TRUE; } } возвращение ложным; } / ** * Метод обновления наблюдателей * * @ VAR строки $ newsHeadline * @ Возвращения недействительными * / общественного updateObservers функции ($ newsHeadline) { Еогеасп ($ этом-> _observerList AS $ ОВ) { $ Обь-> Update ($ newsHeadline); } } / ** * Добавить новую новость * * @ VAR строки $ историю * @ Возвращения недействительными * / общественного addNewsStory функции ($ истории) { если (пусто ($ история) | |! is_string ($ история)) { бросать новые InvalidArgumentException ("Ожидаемые новость! '); } $ Этом-> updateObservers ($ истории); } }
Тема / Наблюдаемые сценария
? <PHP / ** * Этот файл содержит тему * * @ автор Ллойд Уоткин * @ с 2009/12/23 * / абстрактный субъект класса {абстрактной общественной addObserver функции (наблюдатель от $ наблюдателя); абстрактной общественной removeObserver функции (наблюдатель от $ наблюдателя ); абстрактной общественной updateObservers функции ($ newsHeadline);} / ** * Это является предметом класса на примере * * @ автор Ллойд Уоткин * @ с 2009/12/23 * / класс ArticleAggregator расширяет Тема {/ ** * Постановил Список наших наблюдателей * * @ VAR массива * / $ охраняемых _observerList = Array (); / ** * метод, чтобы добавить наблюдатель * * @ VAR наблюдателей $ наблюдателя * @ возвращения недействительными * / Связи с общественностью addObserver функции (наблюдатель от $ наблюдателя) {$ ЬЫз-> _observerList [] = $ наблюдателя;} / ** * метод удаления наблюдателя * * @ VAR наблюдателей $ наблюдателя * @ возвращения булево * / Связи с общественностью removeObserver функции (наблюдатель от $ наблюдателя) {Еогеасп ($ этом-> _observerList AS $ ключ => $ ОВ) {если ($ OB == $ наблюдателя) {отключенное ($ этом-> _observerList [$ ключевых]); возвращение TRUE;}} возвращение ложным;} / ** * Метод обновления наблюдателей * * @ VAR строки $ newsHeadline * @ возвращения недействительными * / Связи с общественностью updateObservers функции ($ newsHeadline) {Еогеасп ($ этом-> _observerList AS $ ОВ) {$ Обь-> Update ($ newsHeadline);}} / ** * Добавить новая новость * * @ VAR строки $ историю * @ возвращения недействительными * / Связи с общественностью addNewsStory функции ($ история) {если (пусто ($ история) | |! is_string ($ история)) {певд InvalidArgumentException ("Ожидаемые новости История ');} $ этой-> updateObservers ($ истории);}} Скрипт контроллера
<? PHP / ** * Наблюдателей шаблон проектирования Пример * * @ Автор Ллойд Уоткин * @ С 2009/12/23 * @ Ссылка http://www.evilprofessor.co.uk * / включают "observers.php; включают "subject.php; если (! пусто ($ ['HTTP_USER_AGENT'] _SERVER)) { эхо "';} / / Что мы делаем? Эхо "наблюдатель" Пример в PHP. PHP_EOL; эхо'================================'. PHP_EOL; / / Установка нашей теме $ Subject = новый ArticleAggregator (); эхо '- ArticleAggregator создан ". PHP_EOL; / / добавить некоторые наблюдатели $ предмета> addObserver (новый NewsObserver ()); $ предмета> addObserver ($ болтунья = новый GossipObserver ()); эхо '- Добавлена NewsObverser и GossipObserver. PHP_EOL. PHP_EOL / / Beep, бип, бип ... Новости Flash! Эхо "Последние новости: знаменитости регбист любит финансирования. PHP_EOL; эхо'============================================== == '. PHP_EOL; $ предмета> addNewsStory ('знаменитости регбист любит финансы "); эхо PHP_EOL; эхо' - SportObserver обнаружил и хочет присоединиться к группе!"; $ Предмета> addObserver (новый SportObserver ()); эхо PHP_EOL . PHP_EOL / / Beep, бип, бип ... Новости Flash! Эхо "Последние новости: правительство столовых снова! . PHP_EOL; эхо'======================================='. PHP_EOL; $ предмета> addNewsStory ("правительство столовых снова! '); Эхо PHP_EOL / / Beep, бип, бип ... Новости Flash! Эхо "Последние новости: мода и футбол объединить. PHP_EOL; эхо'======================================='. PHP_EOL; $ предмета> addNewsStory (мода и футбол комбинат "); эхо PHP_EOL / / Beep, бип, бип ... Новости Flash! Эхо "Последние новости: музыка и политика, а что дальше?" . PHP_EOL; эхо'=========================================='. ("Музыка и политика, а что дальше? ') $ Предмета> addNewsStory;; PHP_EOL эхо PHP_EOL; / ** * сплетниками устают новости очень быстро и решили *, чтобы остановить воспроизведение музыки, несмотря на все интересные новости сегодня! * Эхо '- GossipObserver скучно и покидает группу! . PHP_EOL. PHP_EOL; $ предмета> removeObserver ($ болтунья); / / Beep, бип, бип ... Новости Flash - обновление для ранее история! Эхо "NewsUpdate: мода и футбол объединить говорит. "Правительство". PHP_EOL; эхо'============================================== == '. '========='. PHP_EOL; $ предмета> addNewsStory (мода и футбол комбинат "," говорит правительство.); Эхо PHP_EOL, если (! Пусто ($ ['HTTP_USER_AGENT'] _SERVER)) {эхо "';
}



















































Здравствуйте,
Во-первых, мой английский очень плохо, то
Можете ли вы сказать мне, что системы на картинке?
Fedora 12?
Что такое тема?
Здравствуйте,
Можете ли вы сказать мне, что системы на картинке?
Fedora 12?
Что такое тема?
Его Fedora 11 с KDE применяется. Glasslooks тему я считаю.