Navegación
-
Servicios
-
Noticias
- Google, Facebook y Twitter planean una original protesta
- Adiós Dennis Ritchie
- Muere Steve Jobs
- Cierra Bizarre Creations
- No habrá más Ubuntu Netbook Edition
- Cómo es el Internet Explorer 9 que será lanzado el lunes
- Impulsan una baja del costo de Internet
- Software argentino: ¿"niña bonita" de la economía local?
- Sex.com se vendió en u$s 13 millones
- Google puso fin al misterio de Batman
- Todas las noticias
-
Artículos
-
Descargas
-
Últimos 15 usuarios
-
Usuarios Top 15
-
Sitios recomendados
Web social
Tabla de contenidos
La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.
Resúmen
Ejemplo del patrón Observador (Observer Pattern) en
PHP.
Definición de clases del patrón, clases
concretas y ejemplo.
Sobre el autor
Gastón tiene 30 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.
Forma parte del club desde 19/10/2009 a las 20:52 habiendo estado en linea hace 2 días a las 00:18 por última vez.
Ha publicado 47 artículos en clubdesarrolladores con un promedio de valoración de 7.87 puntos. Puedes visitar su sitio web en http://www.devstudios.com.ar
Estadísticas
- Leido 3718 veces
- Valorado 0.00 puntos
Observer Pattern
El patrón de diseño Observer Pattern es muy útil para informar eventos o notificaciones de algún tipo entre clases relacionadas.

Código Fuente
Definición de las clases e interfaces necesarias para modelar el patrón de diseño Observer Pattern en PHP
<?php
/**
* @author Gastón (clubdesarrolladores.com)
* @copyright 2008
*/
interface Observer
{
public function notify($sender, $params);
}
abstract class Observable
{
protected $observers;
public function __construct()
{
$this->observers = array();
}
public function registerObserver(Observer$observer)
{
if(!in_array($observer, $this->observers))
{
$this->observers[] = $observer;
}
}
public function unregisterObserver(Observer$observer)
{
if(in_array($observer, $this->observers))
{
$key = array_search($observer, $this->observers);
unset($this->observers[$key]);
}
}
abstract public function notifyObservers();
}
?>Clase Textarea y sus listeners
Auditaremos un Textarea a fin de logear la tecla presionada y el momento del evento.
<?php
class Textarea extends Observable {
private $text;
public function __construct()
{
parent::__construct();
$this->text = '';
}
public function notifyObservers() {
foreach($this->observers as $observer) {
$observer->notify($this, $this->params);
}
}
public function keyPress($key) {
$this->text.= $key;
$this->params = array(
'timestamp' => time(),
'key' => $key,
);
$this->notifyObservers();
}
public function getText()
{
return $this->text;
}
}
class KeyLogger implements Observer
{
public function notify($sender, $params) {
echo ' : ', $params['key'], PHP_EOL;
}
}
class TimestampLogger implements Observer
{
public function notify($sender, $params) {
echo date('h:i:s', $params['timestamp']);
}
}
?>Código fuente uso
Utilizar este patrón de diseño es muy simple de implementar
<?php
$textarea = new Textarea();
$textarea->registerObserver(new TimestampLogger());
$textarea->registerObserver(new KeyLogger());
$textarea->keyPress('C');
sleep(1);
$textarea->keyPress('L');
sleep(2);
$textarea->keyPress('U');
sleep(1);
$textarea->keyPress('B');
echo 'Text: ', $textarea->getText(), PHP_EOL;
?>
La salida es la siguiente:
11:58:04 : C
11:58:05 : L
11:58:07 : U
11:58:08 : B
Text: CLUBSi tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.
Descargas
No existen descargas asociadas
Comentarios
Sus comentarios son importantes.
Listado de comentarios
No hay comentarios para listar, si desea puede crear el primer comentario para este artículo.
Agregar un comentario
Debe estar identificado para agregar un comentario
delicio.us
Google Bookmark
Technorati
Twitthis
Meneame
Yahoo My Web
Fresqui
Enchilame