Patrúin Dearadh PHP - Patrún Observer

De réir Watkin Lloyd Steven , Dé Máirt Noll 29, 2009 22:02

Tá mé ag léamh an Chéad Cheann Patrúin Dearadh le déanaí agus tar éis a chinneadh a scríobh roinnt de na patrúin mar shamplaí PHP do mo leasa féin. Chinn mé ar dtús go ceann atá le cód suas Is é an Patrún Observer . Is é an sainmhíniú foirmiúil ar an Patrún Observer:

An patrún bhreathnadóir (fo-thacar den asynchronous fhoilsiú / suibscríobh le patrún é) le bogearraí patrún dhearadh ina mbeidh réad , ar a dtugtar an ábhar sin, coinníonn liosta dá gcleithiúnaithe, breathnóirí a dtugtar, agus iad in iúl go huathoibríoch faoi aon athruithe stát, de ghnáth trí ghlaoch cheann de na modhanna . Tá sé a úsáidtear go príomha a chur i bhfeidhm córais láimhseála dáileadh ócáid.

Mar córais a bheith níos scaoilte cúpláilte a chinntiú go bhfuil nuair a tharlaíonn teagmhas gach córas gur gá eolas ar na nuashonruithe sin ar an eolas. Mar shampla, blog post, tar éis a shábháil ar phost is féidir linn gá a thabhairt suas chun dáta le inneall cuardaigh (m.sh. Lucene), ár léarscáil an tSuímh, tags, úsáideoirí suibscríofa r-phost, etc bhreathnadóir ar an bpatrún thabhairt suas chun dáta a chur leis an lucht éisteachta a ligeann fhorbróirí breise eagarthóireacht gan é a gcuspóir inbhraite . De réir breathnóirí injecting (ie inneall cuardaigh bhreathnadóir thabhairt cothrom le dáta, a gineadóir léarscáil an tSuímh, srl) i (ie córas blog post eagarthóireacht) faoi réir is féidir linn cead a thabhairt don dó a fheidhmeanna na nuashonruithe is féidir, gan aon athrú.

Sula aithníodh an patrún Observer bheadh ​​an cleas is gnách a thabhairt cothrom le dáta an réad inbhraite le líne breise de chód a thabhairt cothrom le dáta an chórais ag teastáil, agus deireadh a chur leis an líne de chód mar is gá. Ní chiallaíonn sé seo gur féidir a chur agus a bhaint go héasca bhreathnadóirí.

An nuashonruithe ábhar go léir a breathnóirí trí mhodh cothrom le dáta. glaonna a thabhairt cothrom le dáta an modh seo i ngach modh bhreathnadóir atá díorthaithe ó chur i bhfeidhm comhéadan. Is féidir le Breathnadóirí cuir iad féin a bhaint as trí mhodhanna i réad inbhraite.

Sin go bunúsach é! Liom é a aimsiú i gcónaí, mar shampla le bheith ar an modh is fearr na foghlama / thuiscint ionas anseo ar mo shampla códaithe suas ...

Observer Patrún in PHP

I mo shampla chruthaigh mé córas nuachta (NewsAggregator) a chuireann amach nuashonruithe ceannlíne nuachta le níos lú feeds nuachta. Anseo nuacht Bíonn sytem an ionad an Ábhar, inbhraite, srl ach an nuacht Fothaí a chur ar an ról atá ag an Breathnóiríéisteoirí.

Chomh luath agus is féidir agus ar iad féin a chur ag gabháil breathnóirí thúsú Dícheangail ón faoi réir mar is cuí leo. I mo mar shampla, tá mé a cruthaíodh trí breathnóirí, na scanadh na ceannlínte chuir amach ag an ábhar agus 'shout' an nuacht más cuí. Is iad na trí breathnóirí ainmnithe thíos chomh maith leis na téarmaí siad scanadh le haghaidh nuair ceannlínte nuachta a fháil:

  • leadóg '' 'rugbaí', Spóirt Observer: 'peil',
  • Nuacht Observer: 'polaitíocht', 'airgeadais', 'rialtais'
  • faisin '' 'cáiliúil', Gossip Observer: 'ceol',

Tar éis initalising an ábhar a chur mé an nuacht agus breathnóirí gossip agus a sheoladh amach ar cothrom le dáta nuachta. Tar éis seo, tá an spórt a chur os comhair bhreathnadóir nuachta is mó a chuirtear amach. Ar deireadh tá an bhreathnadóir gossip asbhaint sula ndéantar ceannlíne nuachta deiridh curtha amach.

Na trí ranganna bhreathnadóir éagsúla chun na Observer comhéadan, tugann siad seo le comhéadan soiléir / modh trína mbeidh siad cothrom le dáta a fháil. Ar choinníoll siad i bhfeidhm ar an gcomhéadan Observer go mbeidh siad in ann iad féin a chur ag gabháil leis an Ábhar. Coinníonn sé seo freisin leis an paradigm cláir de 'clár le comhéadain nach implementations'. Síneann NewsAggregator rang an rang an Ábhar teibí, atá ar fáil dúinn na trí mhodhanna poiblí:

  1. updateObservers ()
  2. addObserver ()
  3. removeObserver ()

Is féidir leis an cód a bheith le feiceáil ar siúl anseo, Observer Patrún i PHP Running , agus is féidir leis an cód a íoslódáil ó anseo, Observer Patrún i PHP Cód .

Observer Script

  <? Php
 / **
  * Tá an comhad seo na breathnóirí
  *
  * @ T-údar Lloyd Watkin
  * @ Ó 2009/12/23
  * /

 Faoi réir aicme teibí
 {
	 addObserver feidhm teibí poiblí (Observer $ breathnóra);
	 removeObserver feidhm teibí poiblí (Observer $ breathnóra);
	 updateObservers feidhm teibí poiblí ($ newsHeadline);
 }

 / **
  * Is é seo an rang mar shampla faoi réir na
  *
  * @ T-údar Lloyd Watkin
  * @ Ó 2009/12/23
  * /
 ArticleAggregator rang Síneann Ábhar
 {
	 / **
	  * Tá liosta de na ár breathnóirí
	  *
	  * @ Eagar var
	  * /
	 cosanta _observerList = $ eagar ();

	 / **
	  * Modh a chur i gcáil breathnadóra
	  *
	  * @ Var Observer $ bhreathnadóir
	  tuairisceán neamhní * @
	  * /
	 addObserver feidhm phoiblí (Observer $ breathnóra)
	 {
		 _observerList $ seo>-[] = $ bhreathnadóir;
	 }

	 / **
	  * Modh a bhaint i gcáil breathnadóra
	  *
	  * @ Var Observer $ bhreathnadóir
	  Boole * ais @
	  * /
	 removeObserver feidhm phoiblí (Observer $ breathnóra)
	 {
		 foreach ($ seo>-_observerList MAR $ eochair> = $ ob) {
			 más rud é ($ ob == $ breathnóra) {
				 unset ($ seo>-_observerList [$ eochair]);
				 toradh fíor;
			 }
		 }
		 tuairisceán bréige;
	 }

	 / **
	  * Modh a dhéanamh breathnóirí a thabhairt suas chun dáta
	  *
	  * @ Teaghrán var $ newsHeadline
	  tuairisceán neamhní * @
	  * /
	 updateObservers feidhm phoiblí ($ newsHeadline)
	 {
		 foreach ($ seo>-_observerList MAR $ ob) {
			 thabhairt cothrom le dáta $ ob-> ($ newsHeadline);
		 }
	 }

	 / **
	  * Cuir scéal nuachta nua
	  *
	  * @ Teaghrán var $ scéal
	  tuairisceán neamhní * @
	  * /
	 addNewsStory feidhm phoiblí ($ scéal)
	 {
		 más rud é (folamh ($ scéal) | |! is_string ($ scéal)) {
			 caith InvalidArgumentException nua ('ag súil le scéal nuachta!');
		 }
		 $ Seo>-updateObservers ($ scéal);
	 }
 } 

Ábhar / Script inbhraite

 ? <Php / ** * Tá an comhad seo an t-údar @ * * faoi réir Lloyd Watkin * @ ó 2009/12/23 * / Faoi réir aicme teibí {addObserver feidhm teibí poiblí (Observer $ breathnóra); removeObserver feidhm teibí poiblí (Observer $ bhreathnadóir ); updateObservers feidhm teibí poiblí ($ newsHeadline);} / * ** Is é seo an rang ábhar don shampla * * @ t-údar Lloyd Watkin * @ ó 2009/12/23 * / rang a leathnaíonn sé ArticleAggregator Ábhar {/ ** * Tá liosta de na ár * * breathnóirí @ * eagar var / cosanta $ _observerList = eagar (); / ** * Modh a chur i gcáil breathnadóra * * @ var Observer * bhreathnadóir ar ais $ @ * neamhní / addObserver feidhm phoiblí (Observer $ breathnóra) {_observerList $ seo>-[] = bhreathnadóir $;} / ** * Modh a bhaint i gcáil breathnadóra * * @ var Observer * bhreathnadóir ar ais $ @ * Boole / removeObserver feidhm phoiblí (Observer $ breathnóra) {foreach ($ seo>- > _observerList MAR $ key = $ ob) {más rud é ($ ob == $ breathnóra) {unset (_observerList $ seo>-[$ eochair]); toradh fíor;}} tuairisceán bréagach;} / ** * Modh a dhéanamh breathnóirí a thabhairt suas chun dáta * * @ var teaghrán $ * newsHeadline @ * tuairisceán neamhní / updateObservers feidhm phoiblí ($ newsHeadline) {foreach ($ seo>-_observerList MAR $ ob) {thabhairt cothrom le dáta $ ob-> ($ newsHeadline);}} / ** * Add nuachta * nua * scéal @ teaghrán $ * scéal var @ tuairisceán neamhní * / addNewsStory feidhm phoiblí ($ scéal) {más rud é (folamh ($ scéal) | |! is_string ($ scéal)) {caith InvalidArgumentException nua ('ag súil le nuacht scéal ');!} $ seo>-updateObservers ($ scéal);}} 

Rialaitheoir Script

  <? Php
 / **
  * Observer Sampla Dearadh Phatrún
  *
  * @ T-údar Lloyd Watkin
  * @ Ó 2009/12/23
  http://www.evilprofessor.co.uk * nasc @
  * /
 Áirítear 'observers.php';
 Áirítear 'subject.php';

 más rud é (! folamh ($ ['HTTP_USER_AGENT'] _SERVER)) {
     macalla '
  ';
 }

 / / Cad atá á dhéanamh againn?
 macalla 'Observer Patrún Sampla i PHP'.  PHP_EOL;
 macalla'================================'.  PHP_EOL;
 / / Socraigh suas ár n-ábhar
 $ Ábhar = ArticleAggregator nua ();
 macalla '- cruthaíodh ArticleAggregator'.  PHP_EOL;

 / / Cuir roinnt breathnadóirí
 $ AddObserver ábhar-> (nua NewsObserver ());
 (Gossiper $ = nua GossipObserver ()) $ ábhar-> addObserver;

 macalla '- Added NewsObverser & GossipObserver'.
	  PHP_EOL.  PHP_EOL;

 / / Bíp, bíp, bíp ...  Flash News!
 ': Is breá le imreoir rugbaí celebrity airgeadas Newsflash' macalla.  PHP_EOL;
 macalla'================================================ '.  PHP_EOL;
 addNewsStory $ ábhar-> ('Is breá le imreoir rugbaí celebrity airgeadais');
 macalla PHP_EOL;

 macalla '- SportObserver aimsithe amach agus ba mhaith leis a bheith páirteach sa ghrúpa!';
 $ AddObserver ábhar-> (nua SportObserver ());
 macalla PHP_EOL.  PHP_EOL;

 / / Bíp, bíp, bíp ...  Flash News!
 ': Messes rialtais suas arís Newsflash!' Macalla  .  PHP_EOL;
 macalla'======================================='.  PHP_EOL;
 $ Ábhar-> addNewsStory ('rialtas messes suas arís!');
 macalla PHP_EOL;

 / / Bíp, bíp, bíp ...  Flash News!
 macalla 'Newsflash: faisean agus peile le chéile'.  PHP_EOL;
 macalla'======================================='.  PHP_EOL;
 addNewsStory $ ábhar-> ('faisin agus peil le chéile');
 macalla PHP_EOL;

 / / Bíp, bíp, bíp ...  Flash News!
 macalla 'Newsflash: ceol agus polaitíocht, cad eile?'  .  PHP_EOL;
 macalla'=========================================='.  PHP_EOL;
 addNewsStory $ ábhar-> ('ceol agus an pholaitíocht, cad eile?');
 macalla PHP_EOL;

 / **
  * Gossipers fás tuirseach de nuacht go han-tapa agus tar éis a chinneadh
  * Chun stop a éisteacht, in ainneoin an nuacht go léir suimiúil inniu!
  * /
 macalla '- GossipObserver Is leamh agus fágann an grúpa!'  .
      PHP_EOL.  PHP_EOL;
 removeObserver $ ábhar-> ($ gossiper);

 / / Bíp, bíp, bíp ...  News Flash - Nuashonrú ar scéal níos luaithe!
 ': Deir faisin agus peil le chéile NewsUpdate' macalla.
      'Rialtais'.  PHP_EOL;
 macalla'================================================ '.
      '========='.  PHP_EOL;
 addNewsStory $ ábhar-> ('faisin agus peil le chéile'.
                         'Arsa rialtais');
 macalla PHP_EOL;

 más rud é (! folamh ($ ['HTTP_USER_AGENT'] _SERVER)) {
     macalla ' 

';

}

3 freagairtí ar "PHP Patrúin Dearadh - Patrún Observer"

  1. Vow a deir:

    Dia duit,
    Gcéad dul síos, Is é mo Béarla an-lag, ansin
    An féidir leat a insint dom cad é an córas sa phictiúr?
    fedora 12?
    Cad é an téama?

  2. Vow a deir:

    Dia duit,
    An féidir leat a insint dom cad é an córas sa phictiúr?
    Fedora 12?
    Cad é an téama?

Leave a Reply













Lánléargas Téama Themocracy

8 cuairteoirí ar líne anois
5 aíonna, 3 bots, 0 baill
Tá 26 ag 12:46 UTC: Max cuairteoirí an lae inniu
An mhí seo: 26 ag 2011/07/05 12:35 UTC
I mbliana: 130 ag 28-03-2011 22:40 UTC
Gach uair: 130 ag 28-03-2011 22:40 UTC