Skip to content

Commit

Permalink
观察者模式
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexchent committed Jul 4, 2021
1 parent 2150c6a commit 74a1ec8
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion DesignPatterns/Observer/test.php
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?php/** * 观察者模式的思想就是一个对象发生一个事件后,逐一通知监听着这个对象的监听者,监听者可以对这个事件马上做出响应。 */interface ObserverInterface { /** * 处理通知 * @return mixed */ public function handle(ObservableInterface $observable);}interface ObservableInterface { //添加一个观察者 public function attach(ObserverInterface $observer); //接触观察者 public function detach(ObserverInterface $observer); /** * 通知观察者 * @return mixed */ public function notify();}class Observable implements ObservableInterface { private $_observers = []; public $_name = "被观察者"; public function __get($name) { // TODO: Implement __get() method. return $this->_name; } /** * 注册一个观察者 * @param ObserverInterface $observer */ public function attach(ObserverInterface $observer) { // TODO: Implement attach() method. if (!in_array($observer, $this->_observers, true)) { $this->_observers[] = $observer; } } /** * 移除一个观察者 * @param ObserverInterface $observer */ public function detach(ObserverInterface $observer) { // TODO: Implement detach() method. foreach ($this->_observers as $k => $v) { if ($v === $observer) { unset($this->_observers[$k]); } } } /** * 通知观察者 * @return mixed|void */ public function notify() { foreach ($this->_observers as $observer) { $observer->handle($this); } }}class TeacherObserver implements ObserverInterface { private $event; public function __construct($event) { $this->event = $event; } public function handle(ObservableInterface $observable) { echo $observable->_name . $this->event; }}// 注册一个被观察者对象$observable = new Observable();// 注册观察者们$observerExampleOne = new TeacherObserver('下班了,走去吃饭');// 附加观察者$observable->attach($observerExampleOne);// 被观察者通知观察者们$observable->notify();
<?php/** * 观察者模式的思想就是一个对象发生一个事件后,逐一通知监听着这个对象的监听者,监听者可以对这个事件马上做出响应。 * * * 举个例子,你可能希望每次订单发货时向用户推送一个 Slack 通知。你可以简单地发起一个可以被监听器接收并转化为 * Slack 通知的 OrderShipped 事件,而不是将订单处理代码和 Slack 通知代码耦合在一起 * */interface ObserverInterface { /** * 处理通知 * @return mixed */ public function handle(ObservableInterface $observable);}interface ObservableInterface { //添加一个观察者 public function attach(ObserverInterface $observer); //接触观察者 public function detach(ObserverInterface $observer); /** * 通知观察者 * @return mixed */ public function notify();}class Observable implements ObservableInterface { private $_observers = []; public $_name = "被观察者"; public function __get($name) { // TODO: Implement __get() method. return $this->_name; } /** * 注册一个观察者 * @param ObserverInterface $observer */ public function attach(ObserverInterface $observer) { // TODO: Implement attach() method. if (!in_array($observer, $this->_observers, true)) { $this->_observers[] = $observer; } } /** * 移除一个观察者 * @param ObserverInterface $observer */ public function detach(ObserverInterface $observer) { // TODO: Implement detach() method. foreach ($this->_observers as $k => $v) { if ($v === $observer) { unset($this->_observers[$k]); } } } /** * 通知观察者 * @return mixed|void */ public function notify() { foreach ($this->_observers as $observer) { $observer->handle($this); } }}class TeacherObserver implements ObserverInterface { private $event; public function __construct($event) { $this->event = $event; } public function handle(ObservableInterface $observable) { echo $observable->_name . $this->event; }}// 注册一个被观察者对象$observable = new Observable();// 注册观察者们$observerExampleOne = new TeacherObserver('下班了,走去吃饭');// 附加观察者$observable->attach($observerExampleOne);// 被观察者通知观察者们$observable->notify();
Expand Down

0 comments on commit 74a1ec8

Please sign in to comment.