Skip to content

Commit 3b8b0de

Browse files
committed
Observer
1 parent 3a74e9f commit 3b8b0de

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

Observer/index.php

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
/**
4+
* Design pattern "Observer" (Behavioral)
5+
* This is demo code
6+
* See for details: http://maxsite.org/page/php-patterns
7+
*/
8+
9+
/**
10+
* Observable use standart interface SplSubject
11+
*/
12+
class Observable implements \SplSubject
13+
{
14+
/**
15+
* list of observers
16+
*/
17+
private $observers;
18+
19+
/**
20+
* create standart class SplObjectStorage
21+
*/
22+
function __construct()
23+
{
24+
$this->observers = new SplObjectStorage();
25+
}
26+
27+
/**
28+
* standart method of SplObjectStorage
29+
*/
30+
function attach(SplObserver $observer)
31+
{
32+
$this->observers->attach($observer);
33+
}
34+
35+
/**
36+
* standart method of SplObjectStorage
37+
*/
38+
function detach(SplObserver $observer)
39+
{
40+
$this->observers->detach($observer);
41+
}
42+
43+
/**
44+
* send notify
45+
*/
46+
function notify()
47+
{
48+
foreach ($this->observers as $obj) {
49+
$obj->update($this);
50+
}
51+
}
52+
}
53+
54+
/**
55+
* Observer use standart interface SplObserver
56+
*/
57+
class Observer1 implements \SplObserver
58+
{
59+
/**
60+
* get notify from Observable
61+
*/
62+
function update(SplSubject $subject)
63+
{
64+
echo 'update Observer1<br>';
65+
}
66+
}
67+
68+
/**
69+
* another class for Observer
70+
*/
71+
class Observer2 implements \SplObserver
72+
{
73+
function update(SplSubject $subject)
74+
{
75+
echo 'update Observer2<br>';
76+
}
77+
}
78+
79+
/**
80+
* demo
81+
*/
82+
83+
/**
84+
* create Observable
85+
*/
86+
$observable = new Observable();
87+
88+
/**
89+
* create Observers
90+
*/
91+
$o1 = new Observer1();
92+
$o2 = new Observer2();
93+
94+
/**
95+
* attach Observers to Observable
96+
*/
97+
$observable->attach($o1);
98+
$observable->attach($o2);
99+
100+
/**
101+
* send notify
102+
*/
103+
$observable->notify();
104+
/*
105+
update Observer1
106+
update Observer2
107+
*/
108+
109+
/**
110+
* exclude Observer1
111+
*/
112+
$observable->detach($o1);
113+
114+
/**
115+
* send notify
116+
*/
117+
$observable->notify();
118+
/*
119+
update Observer2
120+
*/
121+
122+
123+
# end of file

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ See details on http://maxsite.org/page/php-patterns
1313
* "Builder" (Creational)
1414
* "Strategy" (Behavioral)
1515
* "Adapter" (Structural)
16+
* "Observer" (Behavioral)
1617

1718

1819
(c) MaxSite.org, 2019, http://maxsite.org/

0 commit comments

Comments
 (0)