「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
课程背景
- 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远- 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
- 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。
正文开始
这里继续上一节中的内容 2 创建观察者统一处理类 \Observer\EquipSaveOb.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 我们创建具体执行操作的类,然后继承上面的观察者方法
<?php
namespace Observer;
class EquipSave extends EquipSaveOb{
/**
* 执行保存的操作
*/
public function save(){
$this->executeAll();
}
}
这边绑定观察者,跟执行的方法已经编写完成。我们要做的就是给当前操作添加观察者,然后就会依次执行每个观察者中的代码。
4 创建观察者,并执行操作
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,会看到执行成功的返回结果。