07 / 07 / 2009

observer design pattern – php

ekleyen: Emre Çevik kategori: design patterns| php

Observer (gözlemci) tasarım şablonu davranışsal (behavioral paterns) tasarım şablonları grubunda yer alır. observer ile nesnede meydana gelen değişiklikleri diger sınıflara bildiririz.

bir kullanıcı sınıfımızın olduğunu düşünelim. bu sınıfa yeni eleman eklediğimizde veya sildiğimizde database ve logger sınıflarına bu bilgiyi göndermesini istiyoruz. şimdi örneğimize bakalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
 
interface IObserver
{
 
        public function onChange($sender, $args);
}
 
interface IObserverable
{
 
        public function addObserver($obj);
        public function delObserver($obj);
}
 
class Database implements IObserver
{
 
        public function onChange($sender, $args)
        {
                echo get_class().' sınıfına '.get_class($sender).' sınıfından bilgi gönderildi.<br> '.print_r($args,1);
        }
}
 
class Logger implements IObserver
{
 
        public function onChange($sender, $args)
        {
                echo get_class().' sınıfına '.get_class($sender).' sınıfından bilgi gönderildi.<br> '.print_r($args,1);
        }
}
 
class User implements IObserverable
{
        private $_observers=array();
 
        private function notifyObservers($args)
        {
            foreach($this->_observers as $obs)
            {
                        $obs->onChange($this, $args);
            }
        }
 
        public function deleteUser($id)
        {
                $this->notifyObservers(array('user_id'=>$id));
        }
 
        public function addObserver($obj)
        {
                $class = get_class($obj);
                $this->_observers[$class] = $obj;
                echo $class.' observer listesine eklendi<br>';
        }
 
        public function delObserver($obj)
        {
            $class = get_class($obj);
            unset($this->_observers[$class]);
            echo $class.' observer listesinden silindi<br>';
        }
}
 
echo '<pre>';
$user = new User();
$user->addObserver(new Database());
$user->addObserver(new Logger());
$user->deleteUser(55);
$user->delObserver(new Database());
$user->deleteUser(53);
?>

kodumuzun ekran çıktısı

Database observer listesine eklendi
Logger observer listesine eklendi
Database sınıfına User sınıfından bilgi gönderildi.
Array
(
[user_id] => 55
)
Logger sınıfına User sınıfından bilgi gönderildi.
Array
(
[user_id] => 55
)
Database observer listesinden silindi
Logger sınıfına User sınıfından bilgi gönderildi. Array
(
[user_id] => 53
)

dosya : observer design pattern
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. chain of responsibility design pattern- php
  2. iterator design pattern – php
  3. factory method design pattern – php
  4. strategy design pattern – php
  5. command design pattern – php
  6. facade design pattern – php
  7. state design pattern – php
  8. template method design pattern – php
  9. adapter design pattern – php
  10. visitor design pattern – php


(3 votes, average: 3.67 out of 5)
Loading ... Loading ...

henüz yorum yazılmadı

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

design pattern yazılarını nasıl buldunuz?

sonuçlar

Loading ... Loading ...