Navegación
-
Servicios
-
Noticias
- Microsoft extiende el downgrade a Windows XP hasta el 2020
- Opera sumó la protección de AVG a su browser
- Un hombre dice ser dueño del 84% de Facebook
- Se descubre un buffer overflow en la versión de desarrollo de PHP6
- Google lanza una nueva beta de Chrome y es hasta un 35% más rápida
- Ya salio Ubuntu 10.04 LTS
- Digital Sky Technologies le compra ICQ a AOL
- Microsoft habla de la falta de soporte para Windows XP en la Wave 4
- Todas las noticias
-
Artículos
-
Descargas
-
Últimos 10 usuarios
-
Usuarios Top
-
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 29 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.
Forma parte del club desde el 19/10/2009 habiendo estado en linea hace 6 días a las 01:23 por última vez.
Ha publicado 4 artículos en clubdesarrolladores con un promedio de valoración de 7.40 puntos. Puedes visitar su sitio web en http://www.devstudios.com.ar
Estadísticas
- Leido 915 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