PHP设计模式 -- 观察者模式
1、什么是观察者模式?
从面向过程的角度来看,首先是观察者向主题注册,注册完之后,主题再通知观察者做出相应的操作,整个事情就完了。
从面向对象的角度来看,主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低
2、流程图如下:
3、具体代码实现如下(省略了通知接口)
1 <?php
2
3 // 观察者接口, 定义观察者具体需要执行的方法
4 interface Observer
5 {
6 public function eat();
7 }
8
9
10 class Cat implements Observer
11 {
12 public function eat()
13 {
14 echo 111;
15 }
16 }
17
18 class Dog implements Observer
19 {
20 public function eat()
21 {
22 echo 222;
23 }
24 }
25
26
27 class Action
28 {
29 // 保存所有已注册的观察者
30 private $obj = [];
31
32 // 添加观察者
33 // $observer 观察者对象
34 public function addObserver($key, Observer $mode)
35 {
36 $this->obj[$key] = $mode;
37 }
38
39 // 移除观察者
40 public function remObserver($key)
41 {
42 unset($this->obj[$key]);
43 }
44
45 // 广播通知已注册的观察者
46 public function notify()
47 {
48 foreach ($this->obj as $value) {
49 $value->eat();
50 }
51 }
52 }
53
54 $a = new Action();
55 $a->addObserver('cat', new Cat());
56 $a->addObserver('dog', new Dog());
57 $a->notify();
标签:
php 设计模式大全
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!