ПХП-Десигн Паттернс - Посматрач узорка
Ја сам читао Хеад Фирст Десигн Паттернс недавно су одлучили да напише неке од образаца као ПХП примера за моју личну корист. Први који сам одлучио да се код је Обсервер паттерн . Формална дефиниција посматрача узорка је:
Посматрач образац (подскуп асинхроног објављивање / претплатити образац ) је софтверски дизајн образац у којем објекат , који се зове предмет, одржава списак својих породица, позвао посматраче, и обавештава их аутоматски било које државе промена, обично позивом један од њихових метода . Углавном се користи за имплементацију дистрибуираних система догађај руковање.
Као системи постају све лабаво удружена и уверите се да када се догађај деси све системе који захтевају знање ове исправке су информисани. На пример, блогу, након чувања порука можда ћемо морати да ажурирате претраживач (нпр. Луцене), ажурирамо нашу Ситемап, ознаке, е-маил претплаћени корисници, итд посматрач модел омогућава програмерима да додате додатне слушаоцима без измена њиховог посматрати објекат . Убризгавањем посматрача (тј. претраживач посматрача мотор упдате Ситемап Генератор, итд) у теми (тј. уређивања блога систем порука) можемо дозволити да обављају све неопходне измене без икаквих промена.
Пре него што Обсервер образац је идентификован уобичајени трик би био да ажурирате видљиви објекат са додатним линију кода за ажурирање потребних система и уклањање линија кода је потребно. То не дозвољава лако додавање и уклањање посматрача.
Предмет ажурира све своје посматрача преко методе Упдате. Ова исправка метод позива метод у свакој посматрача која је изведена из имплементације интерфејса. Посматрачи могу да додају се уклоне методама у видљиви објекат.
То је у основи то! Ја сам увек наћи пример да буде најбољи начин учења / разумевања Дакле, овде је мој кодиран на пример ...
Посматрач образац у ПХП-
У мом примеру сам направио вести система (НевсАггрегатор) који шаље вести наслов исправке мањих вести. Овде је вест ефикасности заузима место субјекта, видљивих, итд а вести преузимају улогу посматрача или слушалаца.
Када иницијализована посматрачи могу да приложите и одвојите се од предмета као што видите стане. У мом примеру сам створио три посматрача, ови скенирање насловима послат од стране субјекта и "виче" вест ако је потребно. Три посматрача су названи испод заједно са условима које скенира приликом пријема вести:
- Спортска Посматрач: "рагби", "Фудбал", "тенис"
- Вести Посматрач: 'политика', 'Финансије', 'влада'
- Оговарање Посматрач: "Целебрити", "Мусиц", "мода"
Након иниталисинг тему додам вести и трачеви посматрачи и шаљете ажурирање вести. Након овог спорта посматрач се додаје пре више вести исправке се шаљу. На крају трач посматрач је уклоњена пре него што коначна вест наслов је шаље.
Три различита посматрача класе имплементирати интерфејс Обсервер, ово им даје јасан интерфејс / метода кроз коју ће добити исправке. Под условом да имплементира Обсервер интерфејс ће бити у могућности да се прикачите на предмет. Ово се такође одржава у програмирање парадигме "програма интерфејса не имплементација". НевсАггрегатор класа проширује апстрактну класу Предмет која нам пружа потребне три јавне методе:
- упдатеОбсерверс ()
- аддОбсервер ()
- ремовеОбсервер ()
Код се може видети овде ради, посматрача образац у ПХП-Покретање и код може се преузети одавде, посматрача Шара у ПХП коду .
Посматрач скрипте
<Пхп? / ** * Овај фајл садржи посматрача * * @ Аутор Лојд Ваткин * @ Од 2009/12/23 * / апстрактна класа Тема { Сажетак јавну функцију аддОбсервер (посматрач посматрач $); Сажетак јавну функцију ремовеОбсервер (посматрач посматрач $); Сажетак јавну функцију упдатеОбсерверс ($ невсХеадлине); } / ** * Ово је тема класу за пример * * @ Аутор Лојд Ваткин * @ Од 2009/12/23 * / класа АртицлеАггрегатор проширује Тема { / ** * Има списак наших посматрача * * @ Вар низ * / заштићени $ _обсерверЛист = Арраи (); / ** * Начин да додате посматрача * * @ $ Вар посматрач посматрач * @ Ретурн воид * / јавну функцију аддОбсервер (посматрач посматрач $) { $ Тхис-> _обсерверЛист [] = $ посматрача; } / ** * Начин за уклањање посматрача * * @ $ Вар посматрач посматрач * @ Ретурн Боолеан * / јавну функцију ремовеОбсервер (посматрач посматрач $) { фореацх ($ тхис-> _обсерверЛист као $ кеи => $ ОБ) { иф ($ ОБ == $ посматрача) { унсет ($ тхис-> _обсерверЛист [$ кеи]); ретурн ТРУЕ; } } ретурн фалсе; } / ** * Метод за ажурирање посматрача * * @ $ Вар стринг невсХеадлине * @ Ретурн воид * / јавну функцију упдатеОбсерверс ($ невсХеадлине) { фореацх ($ тхис-> _обсерверЛист ас $ ОБ) { $ ОБ-> Упдате ($ невсХеадлине); } } / ** * Додај нови прича вести * * @ $ Вар низ прича * @ Ретурн воид * / јавну функцију аддНевсСтори ($ прича) { иф (емпти ($ прича) | | ис_стринг ($ прича)) { тхров нев ИнвалидАргументЕкцептион ('Очекиване вести!'); } $ Тхис-> упдатеОбсерверс ($ прича); } }
Тема / посматрати скрипте
? Пхп / ** * Овај фајл садржи предмет * * @ аутор Лојд Ваткин * @ * од 2009/12/23 / апстрактну класу Предмет {Сажетак јавну функцију аддОбсервер (посматрач посматрач $); апстрактних јавну функцију ремовеОбсервер (посматрач посматрач $ ); апстрактних јавну функцију упдатеОбсерверс ($ невсХеадлине);} / ** * Ово је тема класе за пример * * @ аутор Лојд Ваткин * @ * од 2009/12/23 / класа АртицлеАггрегатор ектендс Тема {/ ** * Утврђује Листа наших посматрача * * @ вар низ * / $ заштићена _обсерверЛист = Арраи (); / ** * Метод за додавање посматрача * * @ $ вар посматрач посматрач * @ ретурн воид * / јавну функцију аддОбсервер (посматрач посматрач $) {$ тхис-> _обсерверЛист [] = $ посматрач;} / ** * Метод за уклањање посматрача * * @ $ вар посматрач посматрач * @ ретурн * Боолеан / јавну функцију ремовеОбсервер (посматрач посматрач $) {фореацх ($ тхис-> _обсерверЛист ас $ кеи => $ ОБ) {иф ($ ОБ == $ посматрача) {уклањају ($ тхис-> _обсерверЛист [$ кеи]); ретурн;}} ретурн фалсе;} / ** * Метод за ажурирање посматрача * @ $ вар стринг невсХеадлине * @ ретурн воид * / публиц фунцтион упдатеОбсерверс ($ невсХеадлине) {фореацх ($ тхис-> _обсерверЛист ас $ ОБ) {$ ОБ-> Упдате ($ невсХеадлине);}} / ** * Додати нове вести * * @ $ вар низ прича * @ ретурн воид * / публиц фунцтион аддНевсСтори ($ прича) {иф (емпти ($ прича) | |! ис_стринг ($ прича)) {тхров нев ИнвалидАргументЕкцептион ('Очекиване вести причи ');!} $ тхис-> упдатеОбсерверс ($ прича);}} Контролер скрипте
<Пхп? / ** * Пример узорка Посматрач дизајна * * @ Аутор Лојд Ваткин * @ Од 2009/12/23 * * @ Линк хттп://ввв.евилпрофессор.цо.ук * / укључују "обсерверс.пхп '; укључују "субјецт.пхп '; иф (емпти ($ _СЕРВЕР ['ХТТП_УСЕР_АГЕНТ'])) { ецхо '';} / / Шта ми радиш? ецхо "Пример узорка Посматрач у ПХП-у". ПХП_ЕОЛ; ехо'================================'. ПХП_ЕОЛ; / / Поставите нашу тему $ субјецт = нових АртицлеАггрегатор (); ецхо "- АртицлеАггрегатор створио '. ПХП_ЕОЛ; / / Додај Неки посматрачи $ субјецт-> аддОбсервер (ново НевсОбсервер ()); $ субјецт-> аддОбсервер ($ = госсипер нове ГоссипОбсервер ()); ецхо "- Додао НевсОбверсер & ГоссипОбсервер '. ПХП_ЕОЛ. ПХП_ЕОЛ; / / Бип, бип, бип ... Вести фласх! ецхо 'Невсфласх: Целебрити рагбијем воли Финансије. ПХП_ЕОЛ; ехо'============================================== == '. ПХП_ЕОЛ, $ субјецт-> аддНевсСтори ('Целебрити рагбијем воли финансије'); ехо ПХП_ЕОЛ, ецхо "- СпортОбсервер је сазнала и жели да се придружи групи!", $ Субјецт-> аддОбсервер (ново СпортОбсервер ()); ехо ПХП_ЕОЛ . ПХП_ЕОЛ; / / Бип, бип, бип ... Вести фласх! ецхо 'Невсфласх: влада неред опет!' . ПХП_ЕОЛ; ехо'======================================='. ПХП_ЕОЛ, $ субјецт-> аддНевсСтори ("влада неред опет! '); Ецхо ПХП_ЕОЛ; / / Бип, бип, бип ... Вести фласх! ецхо 'Невсфласх: Мода и фудбал комбинују. ПХП_ЕОЛ; ехо'======================================='. ПХП_ЕОЛ, $ субјецт-> аддНевсСтори ('моде и фудбала комбинују'); ецхо ПХП_ЕОЛ; / / Бип, бип, бип ... Вести фласх! ецхо 'Невсфласх: Музика и политика, шта даље? " . ПХП_ЕОЛ; ехо'=========================================='. ПХП_ЕОЛ, $ субјецт-> аддНевсСтори ("Музика и политика, шта даље? '); Ецхо ПХП_ЕОЛ; / ** * Госсиперс расте уморни вести врло брзо су одлучили и да престане * слушање, упркос свим занимљиве вести данас! * / Ецхо '- ГоссипОбсервер је досадно и оставља групе! " . ПХП_ЕОЛ. ПХП_ЕОЛ, $ субјецт-> ремовеОбсервер ($ госсипер); / / Бип, бип, бип ... Вести Блиц - Упдате за раније прича! ецхо 'НевсУпдате: Мода и фудбал комбиновати каже'. 'Влада'. ПХП_ЕОЛ; ехо'============================================== == '. '========='. ПХП_ЕОЛ, $ субјецт-> аддНевсСтори ('моде и фудбала комбинују' ", каже влада. '); Ехо ПХП_ЕОЛ иф (! Празна ($ _СЕРВЕР [' ХТТП_УСЕР_АГЕНТ '])) {ецхо'';
}



















































Поздрав,
Прво, мој енглески је веома лоше, а затим
Можете ли ми рећи шта је систем на слици?
Федора 12?
Шта је тема?
Поздрав,
Можете ли ми рећи шта је систем на слици?
Федора 12?
Шта је тема?
Његова Федора 11 са КДЕ примењују. Гласслоокс тема верујем.