PHP 设计模式十六 观察者模式

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

课程背景

  • 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
  • 万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远
  • 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
  • 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。

正文开始

这里继续上一节中的内容
2 创建观察者统一处理类 \Observer\EquipSaveOb.php

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
php复制代码<?php
namespace Observer;
/**
* 创建抽象类 保证只能被继承 不能被实例化
*/
abstract class EquipSaveOb{

private $observer_arr = []; //保存观察者

/**
* 添加观察者
* 必须是实现了EquipSaveI接口的对象才能添加到观察者中
*/
public function addObServer(\Observer\EquipSaveI $server){
$this->observer_arr[] = $server;
}

/**
* 执行操作
*/
public function executeAll(){
foreach ($this->observer_arr as $key => $value) {
$value->execute();
}
}
}

因为抽象类只能被继承不能被创建的特点,这就保证了,想要使用这个观察者就必须是继承自类EquipSaveOb才可以。

3 我们创建具体执行操作的类,然后继承上面的观察者方法

1
2
3
4
5
6
7
8
9
10
11
12
php复制代码<?php
namespace Observer;

class EquipSave extends EquipSaveOb{

/**
* 执行保存的操作
*/
public function save(){
$this->executeAll();
}
}

这边绑定观察者,跟执行的方法已经编写完成。我们要做的就是给当前操作添加观察者,然后就会依次执行每个观察者中的代码。

4 创建观察者,并执行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
php复制代码class Message implements \Observer\EquipSaveI{
public function execute(){
echo '设备站内信<br>';
}
}

class Notify implements \Observer\EquipSaveI{
public function execute(){
echo '设备短信通知<br>';
}
}

$res = new \Observer\EquipSave();
$res->addObServer(new Message());
$res->addObServer(new Notify());
$res->save();

添加了两个类,对应两个操作。此时访问url,会看到执行成功的返回结果。

image.png

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%