Patrúin Dearadh PHP - Patrún Observer

Ag , Dé Máirt Noll 29, 2009 10:02

Tá mé ag léamh Patrúin Dearadh Chéad Cheann le déanaí, agus tar éis a chinneadh a scríobh roinnt de na patrúin mar shamplaí PHP do mo leas féin. Is é an chéad cheann go bhfuil mé cinneadh déanta suas an cód Patrún Observer . Is é an sainmhíniú foirmiúil ar an Patrún Observer:

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

Mar córais a bheith níos cúpláilte scaoilte a dhéanamh cinnte go bhfuil nuair a tharlaíonn eachtra gach córas a éilíonn eolas ar na nuashonruithe ar an eolas. Mar shampla, a blog post, tar éis a shábháil ar phost is féidir linn gá le nuashonrú inneall cuardaigh (m.sh. Lucene), nuashonrú ar ár léarscáil an tSuímh, tags, úsáideoirí r-phost suibscríofa, etc Ceadaíonn an patrún bhreathnadóir forbróirí a chur ar éisteoirí breise eagarthóireacht gan é a gcuspóir inbhraite . Ag instealladh breathnadóirí (ie inneall cuardaigh nuashonrú breathnadóir, gineadóir léarscáil an tSuímh, srl) i ábhar (ie blog post córas eagarthóireacht) is féidir linn a cheadú dó a fheidhmeanna uile na nuashonruithe is gá gan aon athruithe.

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 thabhairt suas chun dáta ar an gcóras is gá, agus a bhaint de na líne de chód mar is gá. Ní bhaineann sé seo deis a chur leis agus a bhaint go héasca bhreathnadóirí.

Faoi réir ag na nuashonruithe gach ceann dá breathnadóirí trí mhodh cothrom le dáta. Iarrann an modh seo cothrom le dáta an modh i ngach breathnóir a dhíorthaítear ó a chur i bhfeidhm comhéadan. Is féidir le Breathnadóirí cuir bhaint iad féin trí mhodhanna i réad inbhraite.

Sin é go bunúsach é! A gheobhaidh mé i gcónaí, mar shampla a bheith ar an modh is fearr foghlama / an tuiscint sin tá suas anseo agam mar shampla códaithe ...

Patrún Observer i PHP

I mo mar shampla, a chruthaigh mé córas nuacht (NewsAggregator) a chuireann amach nuashonruithe ceannlíne nuacht a Fothaí nuacht níos lú. Seo a ghlacann an sytem nuacht áit an Ábhar, inbhraite, srl ach Fothaí an nuacht a chur ar an ról atá ag an BreathnóiríÉisteoirí.

Is féidir le breathnóirí Nuair a thúsú, ceangail agus Dícheangail iad féin as an ábhar mar is cuí leo. I mo mar shampla, tá mé a cruthaíodh trí breathnóirí, na scanadh na ceannlínte sheoladh amach ag an ábhar agus 'shout' an nuacht is dá chuid is cuí. Is iad na trí breathnóirí ainmnithe thíos chomh maith leis na téarmaí scanadh siad nuair a fháil ceannlínte nuachta:

  • Spórt Observer: 'rugbaí', 'peil', 'leadóige'
  • Nuacht Observer: 'polaitíocht', 'airgeadais', 'rialtas'
  • Observer gossip: 'celebrity', 'ceol', 'faisean'

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

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

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

Is féidir leis an cód a bheith le feiceáil anseo ag rith, Patrún Breathnadóireachta i PHP Rith , agus is féidir leis an cód a íoslódáil ó anseo, Patrún Breathnadóireachta sa Chód PHP .

Observer Script

  <? Php
 / **
  * Is éard atá sa chomhad na breathnóirí
  *
  * @ Údar Lloyd Watkin
  * @ Ó 2009/12/23
  * /

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

 / **
  * Is é seo an rang ábhar le haghaidh an sampla
  *
  * @ Údar Lloyd Watkin
  * @ Ó 2009/12/23
  * /
 Síneann rang 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
	  * Neamhní ar ais @
	  * /
	 addObserver feidhm phoiblí (Observer $ bhreathnadóir)
	 {
		 $ Seo-> _observerList [] = $ bhreathnadóir;
	 }

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

	 / **
	  * Modh a dhéanamh breathnóirí a thabhairt cothrom le dáta
	  *
	  * @ Var teaghrán $ newsHeadline
	  * Neamhní ar ais @
	  * /
	 updateObservers feidhm phoiblí ($ newsHeadline)
	 {
		 foreach ($ seo-> _observerList MAR $ ob) {
			 $ Ob-> thabhairt cothrom le dáta ($ newsHeadline);
		 }
	 }

	 / **
	  * Cuir scéal nuachta nua
	  *
	  * @ Teaghrán var $ scéal
	  * Neamhní ar ais @
	  * /
	 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 / inbhraite Script

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

Rialaitheoir Script

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

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

 / / Cad tá á dhéanamh againn?
 'Sampla Patrún Breathnadóireachta i PHP' macalla.  PHP_EOL;
 macalla'================================'.  PHP_EOL;
 / / Socraigh suas ár n-ábhar
 $ Faoi réir = nua ArticleAggregator ();
 macalla '- ArticleAggregator cruthaíodh'.  PHP_EOL;

 / / Cuir roinnt breathnadóirí
 $ Ábhar-> addObserver (nua NewsObserver ());
 $ Ábhar-> addObserver ($ gossiper = nua GossipObserver ());

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

 / / Bíp, bíp, bíp ...  Nuacht Flash!
 macalla 'is déanaí: celebrity imreoir rugbaí breá airgeadas'.  PHP_EOL;
 macalla'================================================ '.  PHP_EOL;
 $ Ábhar-> addNewsStory ('Is breá le celebrity imreoir rugbaí airgeadais');
 macalla PHP_EOL;

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

 / / Bíp, bíp, bíp ...  Nuacht Flash!
 'is déanaí: rialtas messes suas arís!' macalla  .  PHP_EOL;
 macalla'======================================='.  PHP_EOL;
 $ Ábhar-> addNewsStory ('messes rialtais ar bun arís!');
 macalla PHP_EOL;

 / / Bíp, bíp, bíp ...  Nuacht Flash!
 'is déanaí: faisin agus peile le chéile' macalla.  PHP_EOL;
 macalla'======================================='.  PHP_EOL;
 $ Ábhar-> addNewsStory ('faisin agus peil le chéile');
 macalla PHP_EOL;

 / / Bíp, bíp, bíp ...  Nuacht Flash!
 macalla 'is déanaí: ceol agus ar pholaitíocht, cad eile?'  .  PHP_EOL;
 macalla'=========================================='.  PHP_EOL;
 $ Ábhar-> addNewsStory ('ceol agus an pholaitíocht, cad eile?');
 macalla PHP_EOL;

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

 / / Bíp, bíp, bíp ...  Nuacht Flash - Nuashonrú ar scéal níos luaithe!
 macalla 'NewsUpdate: deir faisean agus peil le chéile'.
      'Rialtas'.  PHP_EOL;
 macalla'================================================ '.
      '========='.  PHP_EOL;
 $ Ábhar-> addNewsStory ('faisin agus peil le chéile'.
                         'A deir an rialtas');
 macalla PHP_EOL;

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

';

}

3 Responses to "Patrúin Dearadh PHP - Patrún Observer"

  1. Vow deir:

    Dia duit,
    An chéad, tá mo Béarla an-lag, ansin
    An féidir leat insint dom cad é an córas sa phictiúr?
    fedora 12?
    Cad é an téama?

  2. Vow deir:

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

Fág Freagra













Téama Lánléargas ag Themocracy

5 cuairteoirí ar líne anois
2 aíonna, 3 bots, 0 baill
Cuairteoirí Max lá atá inniu ann: 24 ag 03:40 UTC
An mhí seo: 2011/09/07 04:27 rn 35 ag UTC
I mbliana: 130 ag 28-03-2011 10:40 UTC
Gach am: 130 ag 28-03-2011 10:40 UTC